1403. 非递增顺序的最小子序列『简单』

题目来源于力扣(LeetCode

一、题目

1403. 非递增顺序的最小子序列

题目相关标签:贪心算法、排序

提示:

  • 1 <= nums.length <= 500
  • 1 <= nums[i] <= 100

二、解题思路

  1. 据题意,即找出数组中最大的几个数,该数相加后的和,大于数组中的其他元素

  2. 对 nums 数组进行元素的求和,得到总和

  3. 对 nums 数组进行元素从小到大的排序

  4. 倒序遍历 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);
}
posted @ 2020-05-31 17:43  知音12138  阅读(238)  评论(0编辑  收藏  举报