题解 | #牛牛的消消乐#

牛牛的消消乐

http://www.nowcoder.com/practice/9deb03b935ec4fd288a8ee5d20364581

JAVA暴力解题法,通过多重for循环外加最小值替换获取到最终要返回的值。这里不再赘述。

这里有一个注意事项,就是按照直接全量for循环的最终代码运行没有问题,但是性能无法满足题目要求。 所以在for循环处理的时候注意先对数组排序,排序后,大小判断就省略的,同时在循环时不是每一个循环都是从0到结尾。注意卡下标最小范围。 如此编码完成算是完成了基础的答题要求,勉强可以及格过关了。 (同时注意第一次循环后获取到的新数组也要重新排序,否则后续的取消除逻辑不成立,会产生错误结果)

public long minimumValueAfterDispel (int[] nums) {
    // write code here
    if(nums.length<3){
        return 0L;
    }
    Arrays.sort(nums);
    long min_res = Integer.MAX_VALUE;
    for(int i=0;i<nums.length;i++){
        int numi = nums[i];
        int[] nums1 = new int[nums.length];
        for(int j=0;j<i;j++){
             nums1[j] =nums[j];
        }
        for(int j1 = i;j1<nums.length;j1++){
           nums1[j1] = nums[j1] - numi;
        }
         Arrays.sort(nums1);
        for(int k=0;k<nums1.length;k++){
            int numk = nums1[k];
            int[] nums2 = new int[nums1.length];
            long res = 0L;
            for(int l =0 ;l<k;l++){
                 res+=nums1[l];
            }
            for(int l=k;l<nums2.length;l++){                                     
                res+=nums1[l] - numk;
            }
            if(res<min_res){
                min_res = res;
            }
        }
    }
    return min_res;
}
全部评论

相关推荐

躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务