leetcode - Find Pivot Index

문제 설명

정수 배열이 주어지면 이 배열의 피벗 인덱스를 계산합니다.

피벗 인덱스는 인덱스의 왼쪽에 있는 모든 숫자의 합이 인덱스의 오른쪽에 있는 모든 숫자의 합과 같은 인덱스입니다.

인덱스가 배열의 왼쪽 가장자리에 있으면 왼쪽에 요소가 없으므로 왼쪽 합계는 0입니다. 이는 배열의 오른쪽 가장자리에도 적용됩니다.

가장 왼쪽 피벗 인덱스를 반환합니다. 그러한 인덱스가 존재하지 않으면 -1을 반환합니다.

  • 예시 1
Input: nums = [1,7,3,6,5,6]
Output: 3
Explanation:
The pivot index is 3.
Left sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11
Right sum = nums[4] + nums[5] = 5 + 6 = 11
  • 예시2
Input: nums = [1,2,3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.
  • 예시3
Input: nums = [2,1,-1]
Output: 0
Explanation:
The pivot index is 0.
Left sum = 0 (no elements to the left of index 0)
Right sum = nums[1] + nums[2] = 1 + -1 = 0

제약 조건:

  • 1 <= nums.length <= 104
  • -1000 <= nums[i] <= 1000

문제 접근

왼쪽 합, 오른쪽 합 변수를 각각 선언하여 배열을 순회하면서 왼쪽에 하나씩 더하고, 오른쪽에는 하나씩 빼서 왼쪽 합 그리고 오른쪽 합을 비교한다.

  1. left(왼쪽 합), right(오른쪽 합) 선언
  2. 배열을 순회하면서 왼쪽에는 숫자 더하기, 오른쪽에는 숫자 빼기 진행
  3. 왼쪽 합과 오른쪽 합을 비교
function solution(nums) {
  if (nums.length === 1) {
    return 0
  }

  let left = 0
  let right = nums.slice(1).reduce((acc, value) => acc + value)

  if (left === right) {
    return 0
  }

  for (let i = 1; i < nums.length; i++) {
    left += nums[i - 1]
    right -= nums[i]

    if (left === right) {
      return i
    }
  }

  return -1
}