距离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();
} 
京公网安备 11010502036488号