[LeetCode] 724. 피벗 인덱스 찾기 어레이의 중심 인덱스 찾기 (Easy) (JAVA) 하루에 한 질문

[LeetCode] 724. 피벗 인덱스 찾기 배열의 중심 인덱스 찾기 (Easy) (JAVA)

제목 주소 : https://leetcode.com/problems/find-pivot-index/

제목 설명:

정수 nums의 배열이 주어지면이 배열의 "pivot"인덱스를 반환하는 메서드를 작성합니다.

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

이러한 인덱스가 없으면 -1을 반환해야합니다. 피벗 인덱스가 여러 개인 경우 가장 왼쪽에있는 피벗 인덱스를 반환해야합니다.

예 1 :

Input: nums = [1,7,3,6,5,6]
Output: 3
Explanation:
The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3.
Also, 3 is the first index where this occurs.

예 2 :

Input: nums = [1,2,3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.

제약 :

  • nums의 길이는 [0, 10000] 범위에 있습니다.
  • 각 요소 nums [i]는 [-1000, 1000] 범위의 정수입니다.

일반적인 생각

정수 유형의 배열 번호가 주어지면 배열의 "중심 인덱스"를 반환하는 메서드를 작성합니다.

배열의 중심 인덱스를 다음과 같이 정의합니다. 배열의 중심 인덱스 왼쪽에있는 모든 요소의 합은 오른쪽에있는 모든 요소의 합과 같습니다.

배열에 중앙 인덱스가 없으면 -1을 반환해야합니다. 배열에 중앙 인덱스가 여러 개 있으면 왼쪽에 가장 가까운 인덱스를 반환해야합니다.

문제 해결 방법

  1. 먼저 배열의 합을 찾기 위해 다시 탐색하십시오.
  2. "중앙 인덱스"가 배열을 두 개로 나누고 왼쪽과 오른쪽이 동일하므로 다시 탐색하십시오. 따라서 pre * 2 + nums [i] == sum의 위치는 "center index"입니다.
  3. 시간 복잡도 O (n)
class Solution {
    public int pivotIndex(int[] nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        int pre = 0;
        for (int i = 0; i < nums.length; i++) {
            if (pre * 2 + nums[i] == sum) return i;
            pre += nums[i];
        }
        return -1;
    }
}

실행 시간 : 1ms, Java 사용자의 100.00 %를 능가
메모리 소비 : 39.2MB, Java 사용자의 40.28 %를 능가

내 공식 계정에 주목 해 주셔서 감사합니다. LeetCode는 매일 하나의 질문을 업데이트합니다.

추천

출처blog.csdn.net/qq_16927853/article/details/113307420