今天的每日一题
主要心得:1.编码之前,先在纸上写好可能的情况,然后先验证下自己的代码,最好编点测试用例
2.Stream流的速度实在太慢,追求高速度的,别用!!!
我用的贪心算法做的:
第一次:
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
int sum=0;
//从小到大排序
Arrays.sort(nums);
int b= Math.min(k, nums.length);
for (int i = 0; i < b; i++) {
//先变换负数
if(nums[i]<0){
nums[i]=-nums[i];
k--;
}
else {
break;
}
}
//再次排序
Arrays.sort(nums);
if(k>0){
//只变换最小的数
for (int i = 0; i < k; i++) {
nums[0]=-nums[0];
}
}
sum = Arrays.stream(nums).sum();
return sum;
}
结果:
速度很慢
于是,经过多次尝试,直到我换了Stream流
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
int sum=0;
//从小到大排序
Arrays.sort(nums);
int b= Math.min(k, nums.length);
for (int i = 0; i < b; i++) {
//先变换负数
if(nums[i]<0){
nums[i]=-nums[i];
k--;
}
else {
break;
}
}
//再次排序
Arrays.sort(nums);
if(k>0){
//只变换最小的数
for (int i = 0; i < k; i++) {
nums[0]=-nums[0];
}
}
for (int n : nums) sum += n;
return sum;
}
}
总结一句话:追求速度别用Stream流~!!!!!!!!!!