周赛138场

 

第一道题意我感觉有点奇怪。。。小伙伴都说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;
    }
};
原文地址:https://www.cnblogs.com/Bella2017/p/10926191.html