n个杀手排成一排,每个晚上如果每个杀手右面的编号小于自己会杀死他,最终经过几个晚上就不会有人被杀?

这里写图片描述

这里写图片描述

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int []data=new int[num];
        for (int i = 0; i <num; i++) {
            data[i]=sc.nextInt();
        }
        System.out.println(do1(data));
    }

    public static int do1(int []data) {
        int day=0;


        ArrayList<Integer>data0=new ArrayList<>();

        for (int i = data.length-1; i >0 ; i--) {           
            if (data[i]>data[i-1]) {
                data0.add(0,data[i]);
            }
        }
        data0.add(0, data[0]);
        if (data.length==data0.size()) {
            return 0;
        }
        day++;

        int size0=data0.size();
        while (data0.size()>1) {
            size0=data0.size();
            data0= do2(data0);
            if (data0.size()==size0) {
                break;
            }
            day++;
        }

        return day;
    }
    public static boolean test(int []data) {
        ArrayList<Integer>data0=new ArrayList<>();
        boolean b=false;//是否有人被杀死
        for (int i = data.length-1; i >0 ; i--) {
            if (data[i]<data[i-1]) {
                b=true;
                //break;
            }
            if (data[i]>data[i-1]) {
                data0.add(data[i]);
            }
        }
        return b;
    }
    public static ArrayList<Integer> do2(ArrayList<Integer>data0) {
        ArrayList<Integer>data1=new ArrayList<>();
        for (int i = data0.size()-1; i >0 ; i--) {
            if (data0.get(i)>data0.get(i-1)) {
                data1.add(0,data0.get(i));
            }
        }
        data1.add(0, data0.get(0));
        return data1;
    }

    public static String changeStr(String str1) {

        char[] ch1 = str1.toCharArray();
        ArrayList<Integer> a = new ArrayList<>();
        a.add(0);
        ArrayList<Integer> aend = new ArrayList<>();

        for (int i = 0; i < ch1.length-1; i++) {
            if (ch1[i] <= '9' && ch1[i] > '0' && !(ch1[i + 1] <= '9' && ch1[i + 1] >'0')) {
                a.add(i + 1);
            }
            if (ch1[i+1] <= '9' && ch1[i] > '0' && !(ch1[i] <= '9' && ch1[i + 1] >'0')) {
                aend.add(i);
            }
        }

        String[] s = new String[a.size()];
        for (int i = 0; i < s.length; i++) {
            int s1=a.get(i);
            int s2=aend.get(i);
            String s3="";
            for (int j = s1; j <= s2; j++) {
                s3+=ch1[j];
            }
            s[i]=s3;
        }
        int[] n = new int[a.size()];
        for (int i = 0; i < s.length; i++) {
            int s1=aend.get(i)+1;
            int s2=s.length-1;
            if (i+1<s.length) {
                s2=a.get(i+1)-1;
            } 

            String s3="";
            for (int j = s1; j <= s2; j++) {
                s3+=ch1[j];
            }
            n[i]=Integer.parseInt(s3);
        }

        for (int i = 0; i < n.length; i++) {
            n[i] = a.get(i);
        }

        int[] sortNum = sortNum(n);

        StringBuffer result = new StringBuffer();
        for (int i = 0; i < sortNum.length; i++) {
            ArrayList<Integer> eql = new ArrayList<>();
            eql.add(i);
            int a1 = n[sortNum[i]];
            int a2 = n[sortNum[i + 1]];
            if (a1 == a2) {
                eql.add(i + 1);
                i++;
            }

            String[] s1 = new String[eql.size()];
            for (int j = 0; j < s1.length; j++) {
                s1[j] = s[sortNum[i]];
            }
            String[] keys = getUrlParam(s1);
            for (int j = 0; j < keys.length; j++) {
                result.append(keys[j]);
            }

        }

        return result.toString();
    }

    public static String[] getUrlParam(String[] keys) {

        for (int i = 0; i < keys.length - 1; i++) {
            for (int j = 0; j < keys.length - i - 1; j++) {
                String pre = keys[j];
                String next = keys[j + 1];
                if (isMoreThan(pre, next)) {
                    String temp = pre;
                    keys[j] = next;
                    keys[j + 1] = temp;
                }
            }
        }
        return keys;
    }

    /**
     * 比较两个字符串的大小,按字母的ASCII码比较
     * 
     * @param pre
     * @param next
     * @return
     */
    private static boolean isMoreThan(String pre, String next) {
        if (null == pre || null == next || "".equals(pre) || "".equals(next)) {

            return false;
        }

        char[] c_pre = pre.toCharArray();
        char[] c_next = next.toCharArray();

        int minSize = Math.min(c_pre.length, c_next.length);

        for (int i = 0; i < minSize; i++) {
            if ((int) c_pre[i] > (int) c_next[i]) {
                return true;
            } else if ((int) c_pre[i] < (int) c_next[i]) {
                return false;
            }
        }
        if (c_pre.length > c_next.length) {
            return true;
        }

        return false;
    }

    public static int[] sortNum(int[] a) {
        int[] asor = new int[a.length];
        for (int i = 0; i < asor.length; i++) {
            asor[i] = i;
        }
        fastSortNum(a, asor, 0, a.length - 1);
        return asor;
    }

    public static void fastSortNum(int arr[], int arrsor[], int low, int high) {
        int l = low;
        int h = high;
        int povit = arr[low];
        while (l < h) {
            while (l < h && arr[h] >= povit) {
                h--;
            }

            while (l < h && arr[l] <= povit) {
                l++;
            }
            if (l < h) {
                int temp = arr[h];
                arr[h] = arr[l];
                arr[l] = temp;
                temp = arrsor[h];
                arrsor[h] = arrsor[l];
                arrsor[l] = temp;
            }
        }
        int temp = arr[low];
        arr[low] = arr[l];
        arr[l] = temp;
        temp = arrsor[low];
        arrsor[low] = arrsor[l];
        arrsor[l] = temp;
        if (l > low) {
            fastSortNum(arr, arrsor, low, l - 1);
        }
        if (h < high) {
            fastSortNum(arr, arrsor, l + 1, high);
        }
    }

    public static boolean changeStr2(String str1, String str2) {
        // char[] ch1 = str1.toCharArray();
        char[] ch2 = str2.toCharArray();
        for (int i = 0; i < ch2.length; i++) {
            if (str1.indexOf(ch2[i]) != -1) {
                continue;
            }
            return false;
        }
        return true;
    }

    public static boolean changeStr3(String str1, String str2) {

        char[] ch1 = str1.toCharArray();
        char[] ch2 = str2.toCharArray();

        for (int i = 0; i < ch2.length; i++) {
            for (int j = 0; j < ch1.length; j++) {
                if (ch1[j] == ch2[i]) {
                    break;
                }
                if (j == ch1.length - 1) {
                    return false;
                }
            }
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39559604/article/details/82556036