第一四零三_非递增顺序的最小子序列
给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。
如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。
与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。
注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。
根据题意,我一开始的思路就是,先把数组进行排序,既然返回顺序是先按元素之和最大的,再按长度最小的,不如一开始就把最大的数一个一个弹出,直到弹出的数组的和大于剩余元素的和,期间将弹出的数保存在list中
看懂题目,一步一步写的蠢办法,说实话,这代码真下饭
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* @author 无法手执玫瑰
* 2020/08/0026 20:40
*/
public class 第一四零三_非递增顺序的最小子序列 {
public static List<Integer> minSubsequence(int[] nums) {
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
int out = 0, all = 0;
for(int j = 0;j<nums.length;j++){
all+=nums[j];
}
List<Integer> a = new LinkedList<>();
for(int i = nums.length -1; i>=0;i--){
a.add(nums[i]);
out +=nums[i];
all -=nums[i];
if(out > all){
return a;
}
}
return null;
}
public static void main(String[] args) {
int[] nums = new int[]{4,4,7,6,7};
System.out.println(minSubsequence(nums));
}
}


浙公网安备 33010602011771号