leetcode-每日打卡-day 4

leetcode 每日打卡

附上kuangbin大佬话激励自己:
人一我百,人十我万,追逐青春的梦想,怀着自信的心,永不放弃!
2020.2.11


记录下来自己做题时得思路,并不一定是最优解

1338. 数组大小减半

类内申请的空间不向平时刷题时申请的全局变量直接是初始化好的,要自己手动初始化

class Solution {
public:
    int minSetSize(vector<int>& arr) {
        // 统计每个数字的出现次数安排出现次数排序
        // 从头遍历找到第一个一次相加个数找到第一个大于 len(arr) / 2的集合个数
        static int book_[100005];
        fill(book_,book_+100005,0);
        vector<int> ans;
        for(int i = 0;i <arr.size();i++ )
        {
            if(book_[arr[i]] == 0)
            {
                book_[arr[i]]++;
                ans.push_back(arr[i]);
            }else book_[arr[i]]++;
        }
        sort(ans.begin(),ans.end(),[](const auto &a, const auto &b){
            return book_[a] > book_[b];});
        int res = 0,cnt = 0 , n = arr.size() / 2;
        for(int i = 0;i < ans.size();i ++)
        {
            if(res + book_[ans[i]] >= n)
            {
                cnt = i + 1;break;
            }else res += book_[ans[i]];
        }
        return cnt;
    }
};

1046. 最后一块石头的重量

tips : 优先队列 (大顶堆)
//回头要复习休闲队列的用法 先占坑

class Solution {
public:
    int lastStoneWeight(vector<int>& stones) {
        priority_queue<int> ans;
        for(int i = 0;i < stones.size(); i++)
            ans.push(stones[i]);
        while(ans.size() >= 2)
        {
            int x = ans.top();ans.pop();
            int y = ans.top();ans.pop();
            if(x != y)ans.push(x-y);
        }
        if(ans.size() > 0)return ans.top();
        else return 0;
    }
};

860. 柠檬水找零

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int sum[3] = {0,0,0};
        for(int i = 0;i < bills.size();i ++)
        {
            if(bills[i] == 5)
            {
                sum[0]++;
            }
            if(bills[i] == 10)
            {
                if(sum[0] == 0)return false;
                else{
                    sum[0]--;sum[1]++;
                }
            }
            if(bills[i] == 20)
            {
                if(sum[1] >= 1 && sum[0] >= 1)
                {
                    sum[2]++;sum[1]--;sum[0]--;
                }else if(sum[1] == 0 && sum[0] >= 3)
                {
                    sum[2]++;sum[0]-=3;
                }else return false;
            }
        }
        return true;
    }
};
posted @ 2020-02-11 21:27  _starsky  阅读(214)  评论(0编辑  收藏  举报