package tx.one;
import java.util.*;
/**
* 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。
如果没有和至少为 K 的非空子数组,返回 -1 。
*/
public class Solution16 {
static List<int[]> result=new ArrayList<>();
public static void main(String[] args) {
int[] A = {1,2,3,-4}; int K = 2;
int i = shortestSubarray(A, K);
System.out.println(i);
}
public static int shortestSubarray(int[] A, int K) {
TreeMap<Integer,Integer> map=new TreeMap<>();
getChildInt(A);
for (int i = 0; i < result.size(); i++) {
//求每个数组的和
int sum=0;
for (int y = 0; y < result.get(i).length; y++) {
sum+=result.get(i)[y];
}
map.put(result.get(i).length,sum);
}
Integer key=0;
Integer value=0;
Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
for (Map.Entry<Integer, Integer> entry : entries) {
key = entry.getKey();
value = entry.getValue();
if(value>=K){
return key;
}
}
return -1;
}
public static void getChildInt(int[] parent){
//思路:
// 先少第一位 ,少第一个或者第二个或者第三个...
if(parent.length<=0){
return;
}
if(parent.length==1){
result.add(parent);
return;
}
for (int i = 0; i < parent.length; i++) {
int[] arr=new int[parent.length-1];
int index=0;
//if是中间
for (int y = 0; y < parent.length&&index<parent.length-1; y++) {
if(y==i){
continue;
}
arr[index]=parent[y];
index++;
}
// for (int i1 = 0; i1 < arr.length; i1++) {
// System.out.print(arr[i1]);
// }
System.out.println();
result.add(arr);
getChildInt(arr);
}
}
}
返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K ,如果没有和至少为 K 的非空子数组,返回 -1 。
最新推荐文章于 2022-10-26 11:09:54 发布