leetcode 724 Find Pivot Index

題目詳情

Given an array of integers nums, write a method that returns the "pivot" index of this array.
We define the pivot index as the index where the sum of the numbers to the left of the index is equal to the sum of the numbers to the right of the index.
If no such index exists, we should return -1. If there are multiple pivot indexes, you should return the left-most pivot index.

題目的意思要找出輸入數組的「樞紐」點。這個「樞紐」的定義就是,這個元素全部左邊的元素的加和恰好等於它全部右邊元素的加和,而且咱們返回這個樞紐點的位置。若是不存在這樣的「樞紐」,則返回-1.若是有多個這樣的樞紐,則返回最左側的樞紐點。數組

Example 1:
Input:
nums = [1, 7, 3, 6, 5, 6]
Output: 3
Explanation:
nums[3]左邊的元素和爲11,恰好等於nums[3]右邊的元素和。
Example 2:
Input:
nums = [1, 2, 3]
Output: -1
Explanation:
沒有知足「樞紐」定義的元素。因此返回-1.this

想法

  • 有一種臨界狀況須要考慮,就是元素nums[0]做爲樞紐點的狀況,這種狀況下,nums[0]的全部的右邊的元素加和應該爲0,則nums[0]爲數組的樞紐點。
  • 考慮了這個特殊狀況就沒有什麼特別的了。咱們先遍歷一趟得到數組元素值的和sum。
  • 在第二趟遍歷中,檢查當前元素左邊全部元素的加和,是否等於sum減去當前元素的值,若是知足,則當前點爲樞紐點,返回當前元素的位置。

解法

public int pivotIndex(int[] nums) {
        int length = nums.length;
        if(length == 0 || length ==1)return -1;
        int sum = 0;
        
        for(int num : nums)sum += num;
        
        if(sum-nums[0] == 0)return 0;
        int left = 0;
        for(int i=1;i<length;i++){
            left += nums[i-1];
            if(sum - left - nums[i] == left){
                return i;
            }
        }
        
        return -1;
    }
相關文章
相關標籤/搜索