1403非遞增順序的最小子序列
8月4日:
問題:
給你一個數組 nums,請你從中抽取一個子序列,滿足該子序列的元素之和 嚴格 大于未包含在該子序列中的各元素之和。
如果存在多個解決方案,只需返回 長度最小 的子序列。如果仍然有多個解決方案,則返回 元素之和最大 的子序列。
與子數組不同的地方在于,「數組的子序列」不強調元素在原數組中的連續性,也就是說,它可以通過從數組中分離一些(也可能不分離)元素得到。
注意,題目數據保證滿足所有約束條件的解決方案是 唯一 的。同時,返回的答案應當按 非遞增順序 排列。

我的代碼:
package cn.com.da.lk;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
/**
* @deviceName 97738
* @Author da
* @Date 2022/8/4 9:31
* @QQ 977389678
* @Phone 15932639701
*/
public class Solution1403 {
public static List<Integer> minSubsequence(int[] nums) {
//轉化為對象數組
Integer[] arrs = new Integer[nums.length];
for (int i = 0; i < nums.length; i++) {
arrs[i] = Integer.valueOf(nums[i]);
}
//求和
int sum =0;
for (int i=0;i<arrs.length;i++)
{
sum = sum +nums[i];
}
//自定義排序
Arrays.sort(arrs, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
int m=0;
int n =0;
//比較
for (int i =0;(i<arrs.length)&&(m<=(sum-m));i++)
{
m = m + arrs[i];
n++;
}
//轉換為符合要求的輸出對象
List<Integer> arr = new ArrayList<>();
for (int i=0;i<n;i++)
{
arr.add(arrs[i]);
}
return arr;
}
public static void main(String[] args) {
int nums[] ={4,4,7,6,7};
List<Integer> integers = minSubsequence(nums);
for (Integer a:integers)
{
System.out.println(a);
}
}
}
總結:使用了自定義排序,也可以使用排序,然后位置倒換。或者使用別的排序方法,但是Array.sort排序是內部有優化的。
浙公網安備 33010602011771號