懦弱求大佬挑 (70)TLE
查看原帖
懦弱求大佬挑 (70)TLE
981981
little_whitezzz楼主2023/12/19 17:58
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {
    static int N = 100010;
    static int[] d = new int[N];
    static int n;
    static boolean check(){
        for(int i = 0;i < n;i ++)
            if(d[i] != 0)
                return false;
        return true;
    }
    //查找当前最小值的下表
    static int find_idx(){
        int min_idx = -1;
        int min = 100010;
        for(int i = 0;i < n;i ++)
            if(d[i] != 0 && d[i] < min){
                min = d[i];
                min_idx = i;
            }
        return min_idx;
    }
    // 找到最小值的左边
    static int find_l(int idx){
        int ans = 0;
        for(int i = 0;i <= idx;i ++){
            if(d[i] == 0)
                ans = i + 1;
        }
        return ans;
    }
    //找到最小值右边的那个数
    static int find_r(int idx){
        int ans = n - 1;
        for(int i = idx;i < n;i ++){
            if(d[i] == 0){
                ans = i - 1;
                break;
            }
        }
        return ans;
    }
    static void solve(int l,int r){
        // 将区间内所有数减1
        for(int i = l;i <= r;i ++)
            d[i] --;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        n = sc.nextInt();
        for(int i = 0;i < n;i ++)
            d[i] = sc.nextInt();
        int ans = 0;
        while(!check()){
            int idx = find_idx();
            int l = find_l(idx);
            int r = find_r(idx);
            solve(l,r);
            ans ++;
        }
        System.out.println(ans);
    }
}
2023/12/19 17:58
加载中...