Go語言題解LeetCode724尋找數(shù)組的中心下標
題目描述
724. 尋找數(shù)組的中心下標 - 力扣(LeetCode) (leetcode-cn.com)
給你一個整數(shù)數(shù)組 nums ,請計算數(shù)組的 中心下標 。
數(shù)組 中心下標 是數(shù)組的一個下標,其左側(cè)所有元素相加的和等于右側(cè)所有元素相加的和。
如果中心下標位于數(shù)組最左端,那么左側(cè)數(shù)之和視為 0 ,因為在下標的左側(cè)不存在元素。這一點對于中心下標位于數(shù)組最右端同樣適用。
如果數(shù)組有多個中心下標,應該返回 最靠近左邊 的那一個。如果數(shù)組不存在中心下標,返回 -1 。
示例 1:
輸入:nums = [1, 7, 3, 6, 5, 6] 輸出:3 解釋: 中心下標是 3 。 左側(cè)數(shù)之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 , 右側(cè)數(shù)之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。
示例 2:
輸入:nums = [1, 2, 3] 輸出:-1 解釋: 數(shù)組中不存在滿足此條件的中心下標。
示例 3:
輸入:nums = [2, 1, -1] 輸出:0 解釋: 中心下標是 0 。 左側(cè)數(shù)之和 sum = 0 ,(下標 0 左側(cè)不存在元素), 右側(cè)數(shù)之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。
提示:
1 <= nums.length <= 10^4
-1000 <= nums[i] <= 1000
思路分析
暴力 破解思路 遍歷數(shù)組每一位,計算出每一位左側(cè)所有值和右側(cè)所有值,然后進行比較。復雜度為 O(n²);
優(yōu)化暴力 破解
其實遍歷時,無需每次都計算所有的值,我們可以利用上一次計算好的值,增減一位即可得到本次的目標值。
[1, 2, 3 ,4 ,5, 6]
遍歷1:當前位為1,leftSum[0]=0, rightSum[0]=20;
遍歷2:當前位為2,leftSum[1]=leftSum[0]+nums[0] = 1, rightSum[1] = rightSum[0] - nums[1] = 18;
遍歷3:當前位為3,leftSum[2]=leftSum[1]+nums[1] = 3, rightSum[2] = rightSum[1] - nums[2] = 15;
........
AC 代碼
class Solution {
public int pivotIndex(int[] nums) {
int length = nums.length;
if (length == 0) {
return -1;
}
if (length == 1) {
return 0;
}
// 左右側(cè)的累加值,初始化
int leftSum = 0;
int rightSum = 0;
// 右累加值,從第二位開始累加到最后一位
for (int i=1;i<length;i++) {
rightSum += nums[i];
}
for (int i=0;i<length;i++) {
if (i == 0) {
if (leftSum == rightSum) {
return i;
}
} else {
// 不是第一位,左累加值要加上上一位的數(shù)字,右累加值要減去本位的數(shù)字
leftSum += nums[i-1];
rightSum -= nums[i];
if (leftSum == rightSum) {
return i;
}
}
}
return -1;
}
}以上就是Go語言題解LeetCode724尋找數(shù)組的中心下標的詳細內(nèi)容,更多關于Go語言尋找數(shù)組中心下標的資料請關注腳本之家其它相關文章!
相關文章
淺談golang for 循環(huán)中使用協(xié)程的問題
這篇文章主要介紹了淺談golang for 循環(huán)中使用協(xié)程的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang實現(xiàn)Biginteger大數(shù)計算實例詳解
這篇文章主要為大家介紹了Golang實現(xiàn)Biginteger大數(shù)計算實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07

