赞
踩
题意:存在一根电线杆,可以是第一根或者最后一根,在该电线杆前的电线杆的高度是不增的,在它之后的电线杆的高度是不减的,请求出最少需要调整多少根电线杆的高度、
输入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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。