第一题是判断中位数和平均数哪个大
平均数直接求。
中位数可以加速一点,利用快速排序是思想。
/**
*
* @param arr int整型一维数组
* @return int整型
*/
public int Answerofjudge (int[] arr) {
// write code here
//先求平均数
double count = 0;
for (int i = 0; i < arr.length; i++) {
count = count + arr[i];
}

    double avg = count/arr.length;
    double mid = 0;


    BigDecimal b1 = new BigDecimal(Double.toString(avg));

    if (arr.length%2 != 0) {//中位数直接取的情况
        mid = quickSortFind(arr, 0, arr.length-1, arr.length/2);
    }else {//中位数需要除以2的情况(可以优化为一次快排,略)
        double m1 = quickSortFind(arr, 0, arr.length-1, arr.length/2);
        double m2 = quickSortFind(arr, 0, arr.length-1, arr.length/2-1);
        mid = (m1+m2)/2;
    }

    BigDecimal b2 = new BigDecimal(Double.toString(mid));

//浮点数的比较,需要注意
return b2.compareTo(b1);
}

/**
 * 
 * @param arr
 * @param low
 * @param high
 * @param target 第n大数字的索引
 * @return 第n大数字
 */
private static int quickSortFind(int[] arr, int low, int high,int target) {
    int i = low;
    int j = high;
    int temp;

    while (i < j) {
        while (arr[j] >= arr[low] && i < j) {
            j--;
        }
        while (arr[i] <= arr[low] && i < j) {
            i++;
        }

        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;

    }

    temp = arr[low];
    arr[low] = arr[j];
    arr[j] = temp;

    if (target == j) {
        return arr[j];
    } else if (target < j) {
        return quickSortFind(arr, low, j-1, target);
    } else {
        return quickSortFind(arr, j+1, high, target);
    }
}

第二题有点类似leetcode的“买卖股票的最佳时机”
我这里也是使用的一次遍历法

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回符合题意的最长的子串长度
* @param x string字符串
* @return int整型
*/
public int Maximumlength (String x) {
// write code here
int ans = 0;
int count = 0;//当前最大符合题意子串
char[] chars = x.toCharArray();

    int n = -1;//n出现的索引
    int p = -1;//p出现的索引
    int y = -1;//y出现的索引
    for (int i = 0; i < chars.length; i++) {
        //分情况记录
        if (chars[i] == 'n') {
            n = i;
        } else if (chars[i] == 'p'){
            p = i;
        }else if (chars[i] == 'y'){
            y = i;
        }

        //npy同时出现,把最小的index(i)替换,重置count
        if (n != -1&& p!= -1 &&y!=-1) {
            int min = -1;
            if (n<p&&n<y) {
                min =n;
                n = -1;

            }else if (p<y&&p<n) {
                min = p;
                p = -1;

            }else {
                min =y;
                y = -1;

            }

            ans = Math.max(ans,count );
            count = i-min;
        } else {
            count ++;
            ans = Math.max(ans,count );

        }

    }
    return ans;
}

第三题 其实就是利用栈
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
public long solve (String str) {
Stack<long> stack = new Stack<>();
String num = "";
long x1,x2;
for(int i = 0;i < str.length();++i)
{
char c = str.charAt(i);
if(c == '#')
continue;
if(c == '+')
{
x1 = stack.pop();
x2 = stack.pop();
stack.push(x1 + x2);
}
else if(c == '-')
{</long>

            x1 = stack.pop();
            x2 = stack.pop();
            stack.push(x2 - x1);

        }
        else if(c == '*')
        {
            x1 = stack.pop();
            x2 = stack.pop();
            stack.push(x1 * x2);
        }
        else
        {
            num = "";
            while(c != '#')
            {
                num += c;
                i++;
                c = str.charAt(i);
            }
            stack.push(Long.parseLong(num));
        }
    }
    return stack.pop();
}