oppo测开笔试2022.9.2
为什么上午做题的同学说好简单,我下午做,咋就那么难呢
选择难死了
算法第一题就g了
1、wakelock贡献值
咱就是说,这个题,花了1个小时,最后通过率20%(下面是通过率20%的代码······)
public ArrayList<Integer> getWakeLockContrib (ArrayList<ArrayList<Integer>> wakeLock) { // write code here ArrayList<Integer> a=wakeLock.get(0); ArrayList<Integer> b=wakeLock.get(0); int asize=a.size(); int bsize=b.size(); int asum=0,bsum=0; for(int i=0;i<asize;i+=2){ asum+=a.get(i+1)-a.get(i); } for(int j=0;j<bsize;j+=2){ bsum+=b.get(j+1)-b.get(j); } int sub=0; if(asize>=bsize){ for(int i=0;i<bsize;i+=2){ if(a.get(i+1)>b.get(i+1) && a.get(i)<b.get(i)){ sub=(b.get(i+1)-b.get(i))/2; }else if(a.get(i+1)<b.get(i+1) && a.get(i)>b.get(i)){ sub=(a.get(i+1)-a.get(i))/2; }else if(a.get(i)<b.get(i) && a.get(i+1)>b.get(i) && a.get(i+1)<b.get(i+1)){ sub=(a.get(i+1)-b.get(i))/2; }else if(b.get(i)<a.get(i) && b.get(i+1)>a.get(i) && b.get(i+1)<a.get(i+1)){ sub=(b.get(i+1)-a.get(i))/2; } asum-=sub;bsum-=sub; } }else{ for(int i=0;i<asize;i+=2){ if(a.get(i+1)>b.get(i+1) && a.get(i)<b.get(i)){ sub=(b.get(i+1)-b.get(i))/2; }else if(a.get(i+1)<b.get(i+1) && a.get(i)>b.get(i)){ sub=(a.get(i+1)-a.get(i))/2; }else if(a.get(i)<b.get(i) && a.get(i+1)>b.get(i) && a.get(i+1)<b.get(i+1)){ sub=(a.get(i+1)-b.get(i))/2; }else if(b.get(i)<a.get(i) && b.get(i+1)>a.get(i) && b.get(i+1)<a.get(i+1)){ sub=(b.get(i+1)-a.get(i))/2; } asum-=sub;bsum-=sub; } } ArrayList<Integer> array=new ArrayList<>(); array.add(asum); array.add(bsum); return array; }
2、
长字符匹配逆序短字符,遇见* 默认匹配,返回长字符中第一次匹配完成的下标(ac)
public int findStr (String str, String mod) { // write code here if(mod.length()==0) return 0; StringBuffer sb=new StringBuffer(mod); String modd=sb.reverse().toString(); for(int i=0;i<str.length();i++){ int a=i,j=0; while(str.charAt(a)==modd.charAt(j) || modd.charAt(j)=='*'){ if(j==modd.length()-1){ return a; } a++; j++; if(a>=str.length() || j>=mod.length()) break; } } return -1; }
3、
翻转链表(ac)
public ListNode reverseList (ListNode head) { // write code here ListNode pre=null; ListNode tmp=head; ListNode next; while(tmp!=null){ next=tmp.next; tmp.next=pre; pre=tmp; tmp=next; } return pre; }