首页 > 其他 > 详细

周赛138场

时间:2019-05-26 15:53:40      阅读:107      评论:0      收藏:0      [点我收藏+]

 

 技术分享图片

 

第一道题意我感觉有点奇怪。。。小伙伴都说2分钟能搞定,呃,如果想到怎么做,的确是蛮简单的。

我的思路其实就是将heights从小到大排序,然后与原来的数一一进行对比,如果不相同说明位置站错了,sum加1。

class Solution {
public:
    int heightChecker(vector<int>& heights) {
        vector<int> checker(heights);
        int sum = 0;
        sort(checker.begin(), checker.end());
        for(int i=0; i<heights.size();i++){
            if(heights[i] != checker[i])
                sum ++;
        }
        return sum;
    }
};

 

技术分享图片

本来想着用动态规划来做,纠结了好久== ,被同学安利了一个简便的思路:先将customers和grumpy的对应位相乘,保存在一个vector c中,然后以X的个数为区间来遍历这个c中所有值(c的长度和customers的长度相同),找到最大的X个值。

class Solution {
public:
    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        int size = customers.size();
        vector<int> c(size, 0);
        int sum = 0;
        for(int i=0; i< size;i++){
            if(grumpy[i]==0){
                sum += customers[i];
            }
            else{
                c[i] = customers[i];
            }
        }
        int s1=0, s2 = 0;
        int x = 0;
        for(int j=0; j<size; j++){
            s1 += c[j];
            x ++;
            if(x == X){
                s2 = max(s2, s1);
                x --;
                s1 -= c[j-X+1];
            }
        }
        sum += s2;
        return sum;
    }
};

 

周赛138场

原文:https://www.cnblogs.com/Bella2017/p/10926191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!