關於Leetcode「一維陣列的動態和」的思考

2021-10-08 12:58:05 字數 1673 閱讀 6966

拿到這道題目的時候思路非常簡單,只需要按照題目的意思將元素累積相加就行了。具體思路為:

1、建立「空列表」儲存結果;

2、對傳入函式的陣列進行迴圈遍歷,將每乙個元素和前乙個累加和相加後存入「空列表」中;

3、返回「空列表」;

以上思路大致是完整的,但是存在著乙個小問題,即第乙個元素怎麼辦?第乙個元素沒有所謂的「前乙個累加和」的,但是這個問題只需新增乙個判斷語句就可以解決了,**如下:

class

solution

:def

runningsum

(self, nums)

: ans =

for index in

range

(len

(nums)):

# 為了獲取列表中元素的索引

if ans is

none

:# 如果「空列表」為空的話跳過本次迴圈,重點是讓索引從1開始

continue1]

+nums[index]

)# 將累加值新增到「空列表」的最後一位

return ans

上面的**雖然能夠解決問題,但是不夠酷炫,其中包含了乙個迴圈與乙個條件語句,條件語句的主要目的就是讓索引從1開始,那麼我們只需要在迴圈語句處修改一下即可,**如下:

class

solution

:def

runningsum

(self, nums)

: ans =

[nums[0]

]for index in

range(1

,len

(nums)):

1]+nums[index]

)return ans

這樣的話呢,我們就可以省略掉乙個條件語句,從而可以節省一些程式執行時間。我們再反觀這段**,「ans」主要是用於存放返回值的,那麼單獨建立存放返回值的儲存空間也會浪費一定的程式執行時間,所以我們思考將「nums」和「ans」結合在一起,**如下:

class

solution

:def

runningsum

(self, nums)

:for index in

range(1

,len

(nums)):

nums[index]

= nums[index-1]

+nums[index]

return nums

上面的**執行速度已經非常優秀了,比第二段**快了8ms左右,整體思路也較為完整,但是我們抬個槓,問一句:「還能更快嗎?」。答案是:「能」。**如下:

class

solution

:def

runningsum

(self, nums)

:for index in

range(1

,len

(nums)):

nums[index]

+= nums[index-1]

return nums

上面這段**事實上確實快了將近2ms左右~

這就是周一的每日一題啦~

不要問我為什麼在禮拜天發,因為嗷嗚當然是要享受美好的週末加班時光啦

關於一維陣列和二維陣列的基本解析

i一 一維陣列的定義 要使用陣列,必須在程式中先定義陣列,即通知計算機 由哪些資料組成陣列,陣列中有多少元素,屬於哪個資料型別。定義陣列的一般形式 型別符陣列名 常量表示式 1 陣列的命名規則和變數名相同,遵循識別符號命名規則。2 在定義陣列時,需要制定陣列中元素的個數,方括號中的常量表示式用來表示...

關於 一維零基陣列

零基,即 zero based,最小索引為0 clr對一維零基陣列使用了特殊的il操作指令newarr,在訪問陣列時不需要通過索引減去偏移量來完成,而且jit也只需執行一次範圍檢查,可以大大提公升訪問效能。看來同樣是陣列,地位還很不一樣 關於介面轉換的總結如下 1 一維零基陣列 可 隱式 轉成介面 ...

C經典 關於一維陣列指標

說明 1 一維陣列指標表示方法 int p a 而非 int p a 也可int p a 0 表示 2 p 1 或a 1表示的是指向下乙個位址 include int main int argc,const char argv printf a 0 p n a 0 printf a 1 p n a ...