贪心+暴力模拟,100%
由第一种方法可以产生一种递归方法,以最小点分割数组,递归两个子数组,递归只能过65%。
如下代码:注释中为贪心+模拟,
最佳思路:递增数组(评论区大佬)
package org.niuke.solution78;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int cnt = 0;
public static void help(int[] arr, int minPre){
if(arr.length <= 0){return;}
if(arr.length == 1){
cnt += arr[0]-minPre;
return;
}
int min = Integer.MAX_VALUE, minIndex = 0;
for(int i = 0; i < arr.length; i++){
if(arr[i] < min){
min = arr[i];
minIndex = i;
}
}
cnt += min - minPre;
if(minIndex>0)help(Arrays.copyOfRange(arr, 0, minIndex), min);
if(minIndex<arr.length-1)help(Arrays.copyOfRange(arr, minIndex + 1, arr.length), min);
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] ints = new int[n];
for(int i = 0; i < n; i++){
ints[i] = scanner.nextInt();
}
//注释部分为暴力模拟
// int index = 0, cnt = 0;
// while (index < ints.length) {
//// System.out.println(Arrays.toString(ints));
// while (index < n && ints[index] == 0) {
// index++;
// }
// for(int i = index; i < n; i++){
// if(ints[i] == 0){
// break;
// }else{
// ints[i]--;
// }
// }
// if(index < n){
// cnt++;
// }
// }
// System.out.println(cnt);
help(ints, 0);
System.out.println(cnt);
}
} 
京公网安备 11010502036488号