立志重刷代码随想录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;
    }
};

代码随想录更新 文章被收录于专栏

冲冲冲冲冲冲!

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务