“牛客编程巅峰赛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(); }