题解 | #牛牛的消消乐#
牛牛的消消乐
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;
}