前言
欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
今天是新的开始 贪心 🔥
一、练习题目
二、算法思路
- 1、1403. 非递增顺序的最小子序列:🔥利用贪心的思想来做,要让我取的子序列之和大于除去这几个数剩下的数之和,并且这个子序列要最短,我们可以考虑从大到小排序,贪心的去找。
三、源码剖析
// 1403. 非递增顺序的最小子序列
class Solution {
public:
vector<int> minSubsequence(vector<int>& nums) {
int sum = 0;
vector<int> ans;
for(auto num : nums) {
sum += num; //(1)
}
sort(nums.begin(), nums.end()); //(2)
int cur = 0;
for(int i = nums.size() - 1; i >= 0; i--) {
cur += nums[i];
ans.push_back(nums[i]);
if(sum - cur < cur) { //(3)
break;
}
}
return ans;
}
};
- 1、先求出数组的总和进行备用;
- 2、对数组进行排序;
- 3、数组的总和 - 当前子序列的总和 = 剩下数之和,剩下数之后刚好小于当前子序列总和说明找到了最短的一个满足条件子序列,break掉。