JS中数组的相等边

Equal sides of an array in JS

问题:取一个整数数组,找到一个下标N,其中N左边整数之和等于N右边整数之和。如果有没有索引可以使这种情况发生,return -1。假设给定数组 {1,2,3,4,3,2,1}: 您的函数 equalsides() 将 return 索引 3,因为在数组的第 3 个位置,索引左侧的总和 ({1,2,3}) 和右侧的总和index ({3,2,1}) 都等于 6.

下面是我写的

  1. 声明两个变量 mid 和 i 其中 在我们正在寻找的索引中间 i= 这是起始索引
  2. 然后 while (mid<= arr.length-1) 我们将遍历数组并将数组的每一边相加,一侧从 i=0 到 i=mid 然后从 i=mid 到i=array.length-1,同时将每边分别加到 leftSum 和 rightSum
  3. 如果 leftSum==rightSum 在任何这些情况下,我们将 return mid 如果不是,它将 mid 增加 1 并重复,
  4. 如果 mid 没有 returned,我们将在最后 return -1。

代码如下

function findEvenIndex(arr)
{
  //Code goes here!
  let mid =1;
  let leftSum=0;
  let rightSum=0;
  while(mid<(arr.length-1)){
   
      
    for(i=0;i<mid;i++){
      
        leftSum=leftSum+arr[i]
      
    }
    
    rightSum = rightSum + arr[mid]
 
 
    if(rightSum==leftSum){
        console.log("mid: "+ mid);
        return mid;
    }
    else{
        
        mid++;
        
    }

  }
 return -1;
}

但是我不确定为什么这不起作用,我们将不胜感激

最简单的方法是使用 slice + reduce 找到该索引

startend 总和

function findEvenIndex(arr) {
  let index = -1;
  for (var i = 0; i < arr.length; i++) {
    let start = arr.slice(0, i+1).reduce((a, b) => a + b, 0);
    let end = arr.slice(i).reduce((a, b) => a + b, 0)
    if (start === end) {
      index = i
    }
  }
  return index;
}

console.log(findEvenIndex([1,2,3,4,3,2,1]))

const inputElement = document.querySelector("#input")
const button = document.querySelector("#btn")
const resultElement = document.querySelector("#result")

button.addEventListener("click" , ()=>{

if(!inputElement.value || inputElement.value.split(",").length <3){ return; }

const numbers = inputElement.value.split(",").map(number=>Number(number))


resultElement.textContent = findIndexOfEqualSum([...numbers])

})

function findIndexOfEqualSum(arr) {

    
    for(let i=0; i < arr.length -1; i++){
    
        let leftSide=0
        let rightSide=0
        
        for(j=0 ; j < i; j++){
        leftSide+= arr[j]
        }
        
        for(g=i+1 ; g < arr.length; g++){
        rightSide+= arr[g]
        }
        
        
        if(leftSide==rightSide) return i;
        
    }
    
   return -1;
}
 
<body>
<style>
body>*:not(:last-child) {
margin-bottom: .5rem;
}

#input {
display:block;
width:100%;
padding:.5rem;
}
</style>

<input 
id="input" 
type="text" 
placeholder="enter comma seperated numbers"
>

<button id="btn"> Find Index </button>

<div id="result"> Result will be here </div>

</body>

略有不同的方法

function findEvenIndex(arr) {
  let left = 0, right = arr.reduce((a, b) => a + b, 0);
  for (let i = 0; left <= right; ++i) {
    right -= arr[i];
    if (left === right) {
      return i;
    }
    left += arr[i];
  }
  return -1;
}

console.log(findEvenIndex([1, 2, 3, 4, 3, 2, 1]))