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