問題:取一個包含整數的陣列并找到一個索引 N,其中 N 左側的整數之和等于 N 右側的整數之和。如果沒有索引會導致這種情況發生,則回傳 - 1. 假設給定陣列 {1,2,3,4,3,2,1}:您的函式 equalsides() 將回傳索引 3,因為在陣列的第 3 個位置,左側的總和索引 ({1,2,3}) 和索引右側的和 ({3,2,1}) 都等于 6。
我寫了以下內容
- 宣告兩個變數 mid 和 i 其中 mid 我們正在尋找的索引 i= 這是起始索引
- 然后當 (mid<= arr.length-1) 我們將遍歷陣列并將陣列的每一側從 i=0 到 i=mid 然后從 i=mid 到 i=array.length-1 , 同時將每一邊分別加到 leftSum 和 rightSum
- 如果 leftSum==rightSum 在任何這些情況下,我們將回傳 mid 如果它沒有,它將增加 mid 并重申,
- 如果沒有回傳 mid 我們將在最后回傳 -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;
}
但是我不確定為什么這不起作用,任何幫助將不勝感激
uj5u.com熱心網友回復:
最簡單的方法是使用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]))
uj5u.com熱心網友回復:
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>
uj5u.com熱心網友回復:
略有不同的方法
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]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446404.html
標籤:javascript 数组 算法
