給你一個整數數組 nums ,請計算數組的 中心下標 。
數組 中心下標 是數組的一個下標,其左側所有元素相加的和等于右側所有元素相加的和。
如果中心下標位于數組最左端,那么左側數之和視為 0 ,因為在下標的左側不存在元素。這一點對于中心下標位于數組最右端同樣適用。
如果數組有多個中心下標,應該返回 最靠近左邊 的那一個。如果數組不存在中心下標,返回 -1
優化后:
class Solution {public int pivotIndex(int[] nums) {int sum = 0;for(int i = 0;i<nums.length;i++){sum += nums[i];}int sum_right = sum;for(int j = 0;j<nums.length;j++){sum_right = sum_right - nums[j];if((sum-nums[j])==sum_right*2){//如果j是中心點,那么左邊和等于右邊和,那么總和sum-nums[j]是sum_right的2倍return j;}}return -1;}
}
或者這樣寫
class Solution {public int pivotIndex(int[] nums) {int sum = 0;for(int i = 0;i<nums.length;i++){sum += nums[i];}int sum_right = sum;int sum_left = 0;for(int j = 0;j<nums.length;j++){sum_right = sum_right - nums[j];if(sum_left==sum_right){return j;}sum_left += nums[j];}return -1;}
}
優化前:
class Solution {public int pivotIndex(int[] nums) {for(int i = 0;i<nums.length;i++){int sumL = 0,sumR = 0;for(int j = 0;j<i;j++){sumL = sumL + nums[j];//左邊的和}for(int k = nums.length-1;k>i;k--){sumR = sumR + nums[k];//右邊的和}if(sumL==sumR){return i;}}return -1;}
}
時間復雜度O(n^2)