最近在刷Codewar上面关于JavaSript的题目,觉得很有意思和经典的题目挑出来和大家一起讨论。==!
这里是一个一道关于数组求和的题目:
大概意思是:
1.去掉最大值和最小值求和
2.对空数组,NULL或者只有一个数值的数组返回0;
问题解决要点:
1.数组的合法判断
这里要求的是空数组以及只有一个元素返回0;
if(array&&array.length){数组非空}
if(array.length>1){数组不止有一个元素}
2.去掉最大值最小值
这里我们要先进行排序,注意Array.sort()只能对string类型的元素进行排序,如果我们要对数值进行排序需要借用自定义函数。
array = array.sort(function(a,b) {return a - b;});
3.求和
最后求和就很简单用一个for从下表1到length-1累加就可以。
最后附上完整代码:
function sumArray(array) {
if(array&&array.length>1){
array=array.sort(function(a,b) {return a - b;});
var total = 0;
for (var i = 1; i < array.length - 1; i++) {
total += array[i];
}
return total;
}else{return 0;}
}
-
通常在求和时候要求去重 这个问题可以变成去掉最大值最小值去重后求和
可以使用Array.indexOf()和Array.lastIndexOf()方法,判断是不是还有兄弟元素,并且使用辅助数组存储去重后的数组。
function sumArray(array) {
if(array!= null && array != undefined && array.length > 1 &&array.lenth!=2){
var result=0;
var j=0;
var sum=new Array();
array.sort(compare);
for(var i=1;i<array.length-1;++i){
if(array.indexOf(array[i])==array.lastIndexOf(array[i])||(i==array.length-2)){
sum[j]=array[i];
j++;
}
}
for(var k=0;k<sum.length;++k){
result=result+sum[k];
}
return result;
}
else {return 0;}
}
function compare(num1,num2){
return num1-num2;
}
这道题的原地址是:https://www.codewars.com/kata/sum-without-highest-and-lowest-number/train/javascript
大家感兴趣的话可以去试试 能用多种语言:
最后附上一个java版本:
import java.util.Arrays;
public class Kata
{
public static int sum(int[] numbers)
{
if (numbers == null) return 0;
if (numbers.length <= 2 ) return 0;
Arrays.sort(numbers);
int [] results = new int[numbers.length];
int index = 0;
results[0] = numbers[1];
for (int i = 2; i < numbers.length-1; i++){
if (results[index] != numbers[i]){
results[++index] = numbers[i];
}
}
int sum = 0;
for(int i = 0; i < index+1; i++){
sum += results[i];
}
return sum;
}
}