1403. 非递增顺序的最小子序列『简单』
题目来源于力扣(LeetCode)
一、题目
题目相关标签:贪心算法、排序
提示:
1 <= nums.length <= 500
1 <= nums[i] <= 100
二、解题思路
-
据题意,即找出数组中最大的几个数,该数相加后的和,大于数组中的其他元素
-
对 nums 数组进行元素的求和,得到总和
-
对 nums 数组进行元素从小到大的排序
-
倒序遍历 nums 数组,依次加上数组中较大的数,当子序列的和,大于其他元素的和时,返回结果
三、代码实现
public static List<Integer> minSubsequence(int[] nums) {
int sum = 0;
// 遍历计算出数组的元素总和
for (int num : nums) {
sum += num;
}
List<Integer> list = new ArrayList<>();
// 元素从小到大排序
Arrays.sort(nums);
int ans = 0;
// 倒序遍历
for (int i = nums.length - 1; i >= 0; i--) {
ans += nums[i];
list.add(nums[i]);
// 判断 ans 子序列和是否大于 其他元素的和
if (ans > (sum - ans)) {
// 已经大于其他元素和时,结束
break;
}
}
return list;
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
int[] nums = {4, 3, 10, 9, 8}; // output:{10, 9}
// int[] nums = {4, 4, 7, 6, 7}; // output:{7, 7, 6}
// int[] nums = {6}; // output:{6}
List<Integer> result = minSubsequence(nums);
System.out.println(result);
}