周赛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; } };