题意:存在一根电线杆,可以是第一根或者最后一根,在该电线杆前的电线杆的高度是不增的,在它之后的电线杆的高度是不减的,请求出最少需要调整多少根电线杆的高度、
输入n+1行
第一行整数n表示电线杆数
剩下n行表示电线杆的高度
10
6 3 4 3 3 4 5 5 4 6
输出2
注意是存在,至少调整的数量、
package com.program;
import java.util.Scanner;
public class lexin1 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] nums = new int[num];
for(int i=0;i<nums.length;i++)
nums[i]=sc.nextInt();
int min = adjusted(num,nums);
System.out.println(min);
// System.out.println(Arrays.toString(nums));
}
public static int adjusted(int n,int[] a){
int[] dec =new int[n];
// System.out.println(n);
int[] inc =new int[n];
int low = a[0];
for(int i=1;i<n;i++){
if (a[i]>low){
dec[i] = 1;
}else{
low = a[i];
}
}
low = a[n-1];
for(int j=n-2;j>-1;j--){
if(a[j]>low){
inc[j] = 1;
}else{
low = a[j];
}
}
int[] res = new int[n];
// System.out.println(n);
for(int i=0;i<n;i++){
int sum1=0;
int sum2=0;
for(int k=0;k<i;k++){
sum1= sum1+ dec[k];
}
for(int m=i+1;m<n;m++){
sum2= sum2+ inc[m];
}
res[i]= sum1+sum2;
}
int min=res[0];
// System.out.println(res[0]);
for(int i=0;i<n;i++){
if(min>res[i]){
min=res[i];
}
}
return min;
}
}
参考@敲键盘的钢琴师python写法:https://blog.csdn.net/hushaoqiqimingxing/article/details/98245567