С кодирането има множество начини за решаване на проблем, ще ви покажа и обясня как реших този проблем.
Даден е масив от цели числа nums
, изчислете опорния индекс на този масив.
Опорният индекс е индексът, при който сборът от всички числа точно отляво на индекса е равен на сбора от всички числа точно > отдясно на индекса.
Ако индексът е в левия край на масива, тогава лявата сума е 0
, защото няма елементи отляво. Това важи и за десния край на масива.
Върнете най-левия индекс на завъртане. Ако не съществува такъв индекс, върнете -1
.
Доста разбираемо. Това означава, че трябва да намерим индекса [i], където стойностите отляво и отдясно са равни и ако няма индекс, връщаме -1.
Пример 1:
Вход: nums = [1,7,3,6,5,6]
Изход: 3
Обяснение:Опорният индекс е 3.
Сума отляво = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11
Дясната сума = nums[4] + nums[5] = 5 + 6 = 11
/** * @param {number[]} nums * @return {number} */ var pivotIndex = function(nums) { let totalSum = 0 for (i=0; i < nums.length; i++){ totalSum += nums[i] } let leftSum = 0 for (i=0; i < nums.length; i++){ if (leftSum == totalSum - leftSum - nums[i]) return i leftSum += nums[i] } return -1 };
Нека да прегледаме този ред по ред.
Първо трябва да получим общата сума на масива. Задаваме променливата totalSum на 0 и след това преминаваме през всеки елемент в масива и добавяме тези стойности към totalSum.
След това намираме общата сума за лявата сума. Задаваме променливата leftSum равна на 0 и преминаваме през масива.
След това добавяме оператор if, за да видим дали стойността на сумата е равна на дясната страна (която ще бъде общата стойност — лявата стойност — стойността на текущото число в масива).
Ако условието е вярно, то връща индекса [i], ако е невярно, тогава връща съхранява текущото число (nums [i]) в лявата сума и след това преминава към следващото число от масива.
Накрая връщаме -1, ако цикълът завърши и не е намерен индекс на обобщена точка.