“牛客编程巅峰赛S2第5场 - 青铜&白银&黄金” 做题记录

牛牛算数

https://ac.nowcoder.com/acm/contest/9556/A

距离ak最近的一次, 8分钟做完第二题。 结果在第三题卡死了。。。

第一题:

    public int Answerofjudge (int[] arr) {
        // write code here
        Arrays.sort(arr);
        double mid =0;
        if(arr.length %2 ==0){
            mid = ((double)arr[arr.length/2 -1]+(double)arr[arr.length/2])/2;
        }else{
            mid = arr[arr.length/2];
        }
        double sum =0;
        for(int a: arr){
            sum +=a;
        }
        sum =sum/arr.length;

        if(mid > sum){
            return 1;
        }else if(mid <sum){
            return -1;
        }else{
            return 0;
        }

    }

第二题

    public int Maximumlength (String x) {
        // write code here
        char[] str= x.toCharArray();
        int[] book = new int[26];
        int left=0;
        int right=0;
        int res= 0;
        while(right<str.length){
            book[str[right]-'a']++;
            while(!judge(book)){
                book[str[left]-'a']--;
                left++;
            }
            right++;
            res = Math.max(res, right-left);
        }
        return res;

    }

    public boolean judge(int[] book){
        if(book['n'-'a']!=0 &&book['p'-'a']!=0 &&book['y'-'a']!=0 ){
            return false;
        }else {
            return true;
        }
    }

第三题:

首先是后缀表达式的定义。 可能会有这样的输入: 1#2#3#4#+++
然后,在做减法时,是前面的数减后面,还是后面减前面
最后...据说比赛时候数据还有问题。 要返回栈底的数才能过。

     public long solve(String str){
        char[] s = str.toCharArray();
        Deque<Long> stack = new LinkedList<>();
        int left =0;
        int right =0;
        while(s[right]!='#') right++;
        stack.push( Long.parseLong(str.substring(left,right)));
        right++;
        left=right;
        while(left<s.length){
            while(s[right]!='#' &&s[right]!='+'&&s[right]!='-'&&s[right]!='*'){
                right++;
            }
            if(s[right] =='#'){
                stack.push( Long.parseLong(str.substring(left,right)));
                right++;
                left=right;
            }else if(s[right]=='+'){
                long a= stack.pop();
                long b =stack.pop();
                stack.push(a+b);
                right ++;
                left =right;
            }else if(s[right]=='-'){
                long b= stack.pop();
                long a =stack.pop();
                stack.push(a-b);
                right ++;
                left =right;
            }else if(s[right]=='*'){
                long a= stack.pop();
                long b =stack.pop();
                stack.push(a*b);
                right ++;
                left =right;
            }
        }
        return stack.pop();
    }
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务