第一题:学生站队AC 100%
15分钟AC

public class Solution{
    public static int[] DistanceToHigher (int[] height) {
        if(height == null)
            return null;
        int len = height.length;
        int []dp = new int [len];
        dp[0] = 0;

        for (int i = 1; i < len; i++) {
            int j = i-1;
            while(j >= 0 && height[j] <= height[i]){
                j--;
            }
            if(j < 0)
                dp[i] = 0;
            else
                dp[i] = i-j;
        }
        return dp;
    }
}

第二题:从A[0]...A[i-1]中找出有且只有一个元素大于A[i]的情况 AC 100%

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

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] s = sc.nextLine().split(" ");
        int N = s.length;
        int [] A = new int [N];
        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(s[i]);
        }

        if(N <= 1){
            System.out.println("-1");
            return ;
        }else if(N == 2){
            if(A[0] > A[1]){
                System.out.println("1");
                return ;
            }else{
                System.out.println("-1");
                return ;
            }
        }else{ //N>=3
            boolean flag = false;
            ArrayList<Integer>list = new ArrayList<Integer>();
            if(A[0] > A[1]){
                int t = 1;
                list.add(t);
                flag = true;
            }

            int max = A[0] > A[1] ? 0 : 1; //最大的
            int maxx = A[0] < A[1] ? 0 : 1;     //次大的
            for (int i = 2; i < N; i++) {
                if(A[max] != A[maxx] && A[i] >= A[maxx] &&  A[i] < A[max]){
                    list.add(i);
                    flag = true;
                }
                if(A[i] > A[max]){
                    int tmp = max;
                    max = i;
                    maxx = tmp;
                }else if(A[i] > A[maxx]){
                    maxx = i;
                }
            }
            if(!flag){
                System.out.println("-1");
            }
            for (int i = 0; i < list.size(); i++) {
                if(i!=list.size()-1){
                    System.out.print(list.get(i)+" ");
                }else{
                    System.out.print(list.get(i));
                }
            }
            return ;
        }
    }
}

第三题:手机靓号 AC 81.82%
动态规划O(N)找出顺子的位数或豹子的位数

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] phone = sc.nextLine().split(",");
        if(phone.length == 0)
            System.out.println("null");
        ArrayList<String>list = new ArrayList<>();


        for (int i = 0; i < phone.length; i++) {
            String tmp = phone[i].substring(3);
            if(isShun(tmp) > 0 || isBao(tmp) > 0){
                list.add(phone[i]);
            }
        }

        if (list.size() == 0){
            System.out.println("null");
        }else{
            Collections.sort(list,new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    int[] shunOrBao1 = isShunOrBao(o1.substring(3));
                    int[] shunOrBao2 = isShunOrBao(o2.substring(3));
                    if(shunOrBao1[1] > shunOrBao2[1]){
                        return -1;
                    }else if (shunOrBao1[1] < shunOrBao2[1]){
                        return 1;
                    }else{
                        if(shunOrBao1[0] == 1){
                            return 1;
                        }else if(shunOrBao2[0] == 1){
                            return -1;
                        }else{
                            return 0;
                        }
                    }
                }
            });

            for (int i = 0; i < list.size(); i++) {
                if(i!=list.size()-1){
                    System.out.print(list.get(i)+",");
                }else{
                    System.out.print(list.get(i));
                }
            }
        }
    }

    public static int[] isShunOrBao(String str){
        int [] result = new int [2];
        int shun = isShun(str);
        int bao = isBao(str);
        if(shun == 0){
            result[0] = 1; //表示豹子
            result[1] = bao;
        }else if(bao == 0){
            result[0] = 0; //表示顺子
            result[1] = shun;
        }else{
            if(bao >= shun){
                result[0] = 1;
                result[1] = bao;
            }else {
                result[0] = 0;
                result[1] = shun;
            }
        }
        return result;
    }


    public static int isShun(String str){
        int shun = 0; //顺子的位数
        int [] dp = new int [str.length()];
        dp[0] = 1;
        for (int i = 1; i < str.length(); i++) {
            if(str.charAt(i) == str.charAt(i-1)){
                dp[i] = dp[i-1] + 1;
            }else{
                dp[i] = 1;
            }
        }
        for (int i = 0; i < dp.length; i++) {
            if(dp[i] >= 3 && shun < dp[i]){
                shun = dp[i];
            }
        }
        return shun;
    }

    public static int isBao(String str){
        int bao = 0; //豹子的位数
        int [] dp = new int[str.length()];
        dp[0] = 1;
        for (int i = 1; i < str.length(); i++) {

            if(str.charAt(i) == (str.charAt(i-1) + 1)){
                dp[i] = dp[i-1] + 1;
            }else{
                dp[i] = 1;
            }
        }

        for (int i = 0; i < dp.length; i++) {
            if(dp[i] >= 3 && bao < dp[i]){
                bao = dp[i];
            }
        }
        return bao;
    }
}

第四题: AC 0%

继续努力,加油!!!