双指针:
public class meituanText {
public static void main(String[] args) {
// int[] arr={1,2,3};
// int n = arr.length;
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
int sum = 0;
int result = 0;
List<List<Integer>> list=new ArrayList<>();
List<Integer> temp=new ArrayList<>();
for(int start=0;start<n;start++){
for (int right = start; right < arr.length; right += 2) {
if (right >= arr.length) {
break;
}
int[] nums = new int[right - start + 1];
for (int i = start; i <= right; i++) {
nums[i-start] = arr[i];
}
Arrays.sort(nums);
result += find(nums);
}
}
System.out.println(result);
}
private static int find(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
return nums[nums.length / 2];
}
}
回溯+优先队列固定顺序
public class Test {
static List<List<Integer>> result = new ArrayList<>();// 存放符合条件结果的集合
static LinkedList<Integer> path = new LinkedList<>();// 用来存放符合条件结果
static Queue<Integer> queue = new PriorityQueue<>((x,y)->(y-x));//大顶堆
public static void main(String[] args) {
int res = 0;
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
subsets(arr);
for (int i = 0; i < result.size(); i++) {
if ((result.get(i).size()&1) == 0) {
result.remove(i);
}
}
System.out.println(result);
for(int i = 0 ; i<result.size() ; i++){
int len = result.get(i).size();
int[] a = new int[len];
for(int j=0 ; j<len; j++) a[j] = result.get(i).get(j) ;
Arrays.sort(a);
res += len==0 ? a[0] : a[a.length/2];
}
System.out.println(res);
}
public static List<List<Integer>> subsets(int[] nums) {
if (nums.length == 0){
result.add(new ArrayList<>());
return result;
}
subsetsHelper(nums, 0);
return result;
}
private static void subsetsHelper(int[] nums, int startIndex){
result.add(new ArrayList<>(path));
if (startIndex >= nums.length){
return;
}
for (int i = startIndex; i < nums.length; i++){
if(!queue.isEmpty() && (queue.peek()+1)!=i)
continue;
queue.add(i);
path.add(nums[i]);
subsetsHelper(nums, i + 1);
path.removeLast();
queue.remove(i);
}
}
}