• Leetcode 1589. 所有排列中的最大和(有思路但超时)


    ()
    有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] = [starti, endi] 。第 i 个查询求 nums[starti] + nums[starti + 1] + ... + nums[endi - 1] + nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。

    你可以任意排列 nums 中的数字,请你返回所有查询结果之和的最大值。

    由于答案可能会很大,请你将它对 109 + 7 取余 后返回。

    示例 1:

    输入:nums = [1,2,3,4,5], requests = [[1,3],[0,1]]
    输出:19
    解释:一个可行的 nums 排列为 [2,1,3,4,5],并有如下结果:
    requests[0] -> nums[1] + nums[2] + nums[3] = 1 + 3 + 4 = 8
    requests[1] -> nums[0] + nums[1] = 2 + 1 = 3
    总和为:8 + 3 = 11。
    一个总和更大的排列为 [3,5,4,2,1],并有如下结果:
    requests[0] -> nums[1] + nums[2] + nums[3] = 5 + 4 + 2 = 11
    requests[1] -> nums[0] + nums[1] = 3 + 5  = 8
    总和为: 11 + 8 = 19,这个方案是所有排列中查询之和最大的结果。
    

    示例 2:

    输入:nums = [1,2,3,4,5,6], requests = [[0,1]]
    输出:11
    解释:一个总和最大的排列为 [6,5,4,3,2,1] ,查询和为 [11]。
    

    示例 3:

    输入:nums = [1,2,3,4,5,10], requests = [[0,2],[1,3],[1,1]]
    输出:47
    解释:一个和最大的排列为 [4,10,5,3,2,1] ,查询结果分别为 [19,18,10]。
     
    

    提示:

    • n == nums.length
    • 1 <= n <= 10^5
    • 0 <= nums[i] <= 10^5
    • 1 <= requests.length <= 10^5
    • requests[i].length == 2
    • 0 <= starti <= endi < n

    Code:

    
    class Solution {
    public:
        typedef pair<int, int> PAIR;
        
        struct CmpByValue {
            bool operator()(const PAIR& lhs, const PAIR& rhs) {
                return lhs.second > rhs.second;
            }
        };
        
        int maxSumRangeQuery(vector<int>& nums, vector<vector<int>>& requests) {
    #if 1
            map<int,int>mymap;
            
            for(int i=0;i<requests.size();i++)
            {
                vector<int>sub=requests[i];
                
                for(int j=sub[0];j<=sub[1];j++)
                {
                    
                    mymap[j]++;
                }
            }
            
            
            //把map中元素转存到vector中
            vector<PAIR> map_vec(mymap.begin(), mymap.end());
            
            //对vector排序
            sort(map_vec.begin(), map_vec.end(), CmpByValue());
            
            
            
            sort(nums.begin(),nums.end(),greater<int>());
            vector<int>newnums;
            newnums.resize(nums.size(),-1);
            for(int i=0;i<map_vec.size();i++)
            {
                
                //    cout<<"map_vec[i].first="<<map_vec[i].first<<" "<<nums[i]<<endl;
                newnums[map_vec[i].first]=nums[i];
            }
            
            
            
            for(int i=map_vec.size();i<nums.size();i++)
            {
                for(int j=0;j<newnums.size();j++)
                {
                    if(newnums[j]==-1)
                    {
                        newnums[j]=nums[i];
                        break;
                    }
                }
            }
            
            //  cout<<"newvec:"<<endl;
            //   for(int i=0;i<newnums.size();i++)
            //   {
            //       cout<<newnums[i]<<endl;
            //   }
    #endif
            uint64_t res=0;
            int exp=1000000007;
            for(int i=0;i<requests.size();i++)
            {
                vector<int>sub=requests[i];
                
                for(int j=sub[0];j<=sub[1];j++)
                {
                    
                    
                    res+=newnums[j];
                }
            }
            
            cout<<res%exp<<endl;;
            return res%exp;
            
        }
    };
    
  • 相关阅读:
    如何将本地项目上传到码云
    启动Springboot 报错 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Jan 12 15:50:25 CST 2019 There was an unexpected error (type=Not
    Redis
    c++指针
    zed hdmi核构建error:xx uses VFP register arguments, hdmi02.elf does not
    github只下载某个文件夹的方法
    linux下vivado tcl使用 & linux环境变量设置
    vivado hls make csim error: /opt/Xilinx/Vivado_HLS/2016.4/lnx64/tools/opencv/libopencv_highgui.so: undefined reference to `TIFFR
    linux下hls运行make csim出现:../common/Makefile.rules:55: *** multiple target patterns. Stop.
    读写sd卡代码分析(vivado sdk c++)
  • 原文地址:https://www.cnblogs.com/xiaohai123/p/16390225.html
Copyright © 2020-2023  润新知