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.
下面是我写的
- 声明两个变量 mid 和 i 其中
在我们正在寻找的索引中间
i= 这是起始索引
- 然后 while (mid<= arr.length-1) 我们将遍历数组并将数组的每一边相加,一侧从 i=0 到 i=mid 然后从 i=mid 到i=array.length-1,同时将每边分别加到 leftSum 和 rightSum
- 如果 leftSum==rightSum 在任何这些情况下,我们将 return mid 如果不是,它将 mid 增加 1 并重复,
- 如果 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
找到该索引
的 start
和 end
总和
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]))
问题:取一个整数数组,找到一个下标N,其中N左边整数之和等于N右边整数之和。如果有没有索引可以使这种情况发生,return -1。假设给定数组 {1,2,3,4,3,2,1}: 您的函数 equalsides() 将 return 索引 3,因为在数组的第 3 个位置,索引左侧的总和 ({1,2,3}) 和右侧的总和index ({3,2,1}) 都等于 6.
下面是我写的
- 声明两个变量 mid 和 i 其中 在我们正在寻找的索引中间 i= 这是起始索引
- 然后 while (mid<= arr.length-1) 我们将遍历数组并将数组的每一边相加,一侧从 i=0 到 i=mid 然后从 i=mid 到i=array.length-1,同时将每边分别加到 leftSum 和 rightSum
- 如果 leftSum==rightSum 在任何这些情况下,我们将 return mid 如果不是,它将 mid 增加 1 并重复,
- 如果 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
找到该索引
start
和 end
总和
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]))