前端编程题:已知一个包含n个数字的数组A,其中连续多个数字的和为sum,请找出该连续数字的初始索引start和结束索引end
const arr1 = [7,5,4,3,1,2,3,4,5,6,0] //测试1
const arr2 = [1,2,3,4,5,6,7,8,9,0] //测试2
const arr3 = [10] //测试3
const arr4 = [12,23,1,2,3,4,5,6,7] //测试4
const sum = 10 //测试5
function findIndex(arr,sum){
let tempSum = 0;
let backIndex = 0;
let endIndex = -1;
let currentIndex = 0;
for(currentIndex; currentIndex<arr.length; currentIndex++){
tempSum+=arr[currentIndex];
if(sum<tempSum){
backIndex += 1;
currentIndex = backIndex;
tempSum = 0;
}else if(sum == tempSum){
endIndex = currentIndex;
break;
}
}
if(endIndex==-1){
console.log("没有找到")
}else{
console.log("startIndex:",backIndex==0?0:backIndex+1);
console.log("endIndex:",endIndex);
}
}
//执行测试
findIndex(arr4,sum);
使用一次for循环,上述五种情况测试均正确,运行结果如下:
下面是我的一个实现,供参考:
<script type="text/javascript">
nums = [2,1,2,3,4,8,7];
sum = 19;
for(var i=0;i<nums.length;i++){ //遍历整个数组
start = i; //起始下标设置为i
s=0; //临时和变量设置为0
for(var j=i;j<nums.length;j++){ //从当前下标i开始寻找和为sum的起始下标和结束下标
s+= nums[j]; //临时和变量累加遍历过的数组下标里的数字
end = j; //结束下标设置为当前遍历到的数组下标
if(s==sum){ //如果和为sum则结束变量
alert("start:"+start+",end="+end); //打印结果
break; //退出此次遍历。
}
}
}
</script>