Go語言題解LeetCode724尋找數(shù)組的中心下標(biāo)
題目描述
724. 尋找數(shù)組的中心下標(biāo) - 力扣(LeetCode) (leetcode-cn.com)
給你一個(gè)整數(shù)數(shù)組 nums
,請(qǐng)計(jì)算數(shù)組的 中心下標(biāo) 。
數(shù)組 中心下標(biāo) 是數(shù)組的一個(gè)下標(biāo),其左側(cè)所有元素相加的和等于右側(cè)所有元素相加的和。
如果中心下標(biāo)位于數(shù)組最左端,那么左側(cè)數(shù)之和視為 0
,因?yàn)樵谙聵?biāo)的左側(cè)不存在元素。這一點(diǎn)對(duì)于中心下標(biāo)位于數(shù)組最右端同樣適用。
如果數(shù)組有多個(gè)中心下標(biāo),應(yīng)該返回 最靠近左邊 的那一個(gè)。如果數(shù)組不存在中心下標(biāo),返回 -1 。
示例 1:
輸入:nums = [1, 7, 3, 6, 5, 6] 輸出:3 解釋: 中心下標(biāo)是 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ù)組中不存在滿足此條件的中心下標(biāo)。
示例 3:
輸入:nums = [2, 1, -1] 輸出:0 解釋: 中心下標(biāo)是 0 。 左側(cè)數(shù)之和 sum = 0 ,(下標(biāo) 0 左側(cè)不存在元素), 右側(cè)數(shù)之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。
提示:
1 <= nums.length <= 10^4
-1000 <= nums[i] <= 1000
思路分析
暴力 破解思路 遍歷數(shù)組每一位,計(jì)算出每一位左側(cè)所有值和右側(cè)所有值,然后進(jìn)行比較。復(fù)雜度為 O(n²);
優(yōu)化暴力 破解
其實(shí)遍歷時(shí),無需每次都計(jì)算所有的值,我們可以利用上一次計(jì)算好的值,增減一位即可得到本次的目標(biāo)值。
[1, 2, 3 ,4 ,5, 6]
遍歷1:當(dāng)前位為1,leftSum[0]=0, rightSum[0]=20;
遍歷2:當(dāng)前位為2,leftSum[1]=leftSum[0]+nums[0] = 1, rightSum[1] = rightSum[0] - nums[1] = 18;
遍歷3:當(dāng)前位為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ù)組的中心下標(biāo)的詳細(xì)內(nèi)容,更多關(guān)于Go語言尋找數(shù)組中心下標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go單元測(cè)試對(duì)GORM進(jìn)行Mock測(cè)試
這篇文章主要為大家介紹了Go單元測(cè)試對(duì)GORM進(jìn)行Mock測(cè)試用例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06淺談golang for 循環(huán)中使用協(xié)程的問題
這篇文章主要介紹了淺談golang for 循環(huán)中使用協(xié)程的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12Golang使用Gin實(shí)現(xiàn)文件上傳的示例代碼
本文我們主要介紹了Golang如何使用Gin實(shí)現(xiàn)文件上傳,Go標(biāo)準(zhǔn)庫net/http對(duì)文件上傳已經(jīng)提供了非常完善的支持,而Gin框架在其基礎(chǔ)上進(jìn)一步封裝,因此使用Gin開發(fā)文件上傳功能時(shí),只需要簡(jiǎn)單幾行代碼便可以實(shí)現(xiàn),需要的朋友可以參考下2024-02-02Golang標(biāo)準(zhǔn)庫time包日常用法小結(jié)
本文主要介紹了Golang標(biāo)準(zhǔn)庫time包日常用法小結(jié),可以通過它們來獲取當(dāng)前時(shí)間、創(chuàng)建指定時(shí)間、解析時(shí)間字符串、控制時(shí)間間隔等操作,感興趣的可以了解一下2023-11-11Golang實(shí)現(xiàn)Biginteger大數(shù)計(jì)算實(shí)例詳解
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)Biginteger大數(shù)計(jì)算實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Go代碼的組織和格式化規(guī)則實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了Go代碼的組織和格式化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08