当前位置: 首页 > 面试经验 >

oppo测开笔试2022.9.2

优质
小牛编辑
120浏览
2023-03-28

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;
        
    }


#OPPO笔试##面经笔经##23届秋招笔面经#
 类似资料: