立志重刷代码随想录60天冲冲冲!!——第二十九天
1005. K 次取反后最大化的数组和
class Solution {
public:
bool static cmp(int a, int b) {
return abs(a) > abs(b);
}
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end(), cmp);
for (int i = 0; i < nums.size(); i++) {
if (k > 0 && nums[i] < 0) {
nums[i] = -nums[i];
k--;
}
}
// 可以用while(k--),但效果不如取余快
if (k % 2 == 1) nums[nums.size()-1] = -nums[nums.size()-1];
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
}
return sum;
}
};
860. 柠檬水找零
判断所有可能的条件即可
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
if (bills[0] != 5) return false;
unordered_map<int, int> umap;
for (int i = 0; i < bills.size(); i++) {
if (bills[i] == 5){
umap[bills[i]]++;
} else if (bills[i] == 10) {
umap[bills[i]]++;
umap[5]--;
if (umap[5] < 0) return false;
} else if (bills[i] == 20) {
umap[bills[i]]++;
if (umap[5] >= 1 && umap[10] >= 1) {
umap[5] -= 1;
umap[10] -= 1;
} else if (umap[5] >= 3) {
umap[5] -= 3;
} else return false;
}
}
return true;
}
};
代码随想录更新 文章被收录于专栏
冲冲冲冲冲冲!
查看7道真题和解析