前端:已知一个包含n个数字的数组A,其中连续多个数字的和为sum,请找出该连续数字的初始索引start和结束索引end

前端编程题:已知一个包含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循环,上述五种情况测试均正确,运行结果如下:

img

下面是我的一个实现,供参考:


<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>