疯狂队列

https://www.nowcoder.com/practice/d996665fbd5e41f89c8d280f84968ee1?tpId=90&tqId=30786&tPage=1&rp=1&ru=/ta/2018test&qru=/ta/2018test/question-ranking

比较简单的贪心策略:

每次挑数组中剩余元素的最大,最小去去比较

public static int crazy(int[] nums,int n) {//nums已经排好序
        if(n==0) return 0;
        if(n==2) return nums[1]-nums[0];      
           int diff=nums[n-1]-nums[0];//已经加入队列的0和n-1
           int minIn=0;
           int maxIn=n-1;
           int minNot=1;
           int maxNot=n-2;
           while(minNot<maxNot) {
               diff+=nums[maxIn]-nums[minNot];
               diff+=nums[maxNot]-nums[minIn];
               maxIn=maxNot;
               minIn=minNot;
               minNot++;
               maxNot--;
           }
           if(minNot==maxNot)//奇数多出来一个
               diff+=Math.max(nums[maxIn]-nums[minNot], nums[minNot]-nums[minIn]);
           return diff;
    }

 

posted @ 2019-05-12 10:18  LeeJuly  阅读(146)  评论(0)    收藏  举报