Datawhale第九期組隊學習--數據結構與算法(上)Task01:數組(1天)

理論部分
  • 理解數組的存儲與分類。
  • 實現動態數組,該數組能夠根據需要修改數組的長度。
  1. python中沒有數組這一說,和它對應的則是列表list和元組tuple。list對應爲其它與語言中的可變數組,而tuple對應爲不可變數組。元組和列表最大區別在於元組不可變。元組不支持元素的增加,不支持修改,刪除只能刪除整個元組。
  2. python中的集合set屬於數組嗎?
練習部分

以下用python實現:

  1. 利用動態數組解決數據存放問題

編寫一段代碼,要求輸入一個整數N,用動態數組A來存放2~N之間所有5或7的倍數,輸出該數組。
代碼:

#!/usr/bin/python

targetList = []
n = input('請輸入一個整數:N=')
try:
    n = int(n)
except:
    print('您輸入的不是數字')
for i in range(2, n+1):
    if i % 5 == 0 or i % 7 == 0:
        targetList.append(i)
print('輸出結果:', targetList)
  1. 託普利茨矩陣問題

如果一個矩陣的每一方向由左上到右下的對角線上具有相同元素,那麼這個矩陣是託普利茨矩陣。

給定一個M x N的矩陣,當且僅當它是託普利茨矩陣時返回True。
示例:

輸入:
matrix = [
  [1,2,3,4],
  [5,1,2,3],
  [9,5,1,2]
]
輸出: True

解釋:
在上述矩陣中, 其對角線爲: "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。 各條對角線上的所有元素均相同, 因此答案是True。

疑問:
1.上述列子中符合這個概念的方向爲左下到右上的,應該不是託普利茨矩陣吧?
2.寫成python類的方式跟直接寫的,哪個優勢更突出?
3.思路是什麼?

代碼:

def compute(matrix):
    for r, row in enumerate(matrix):
        for c, col in enumerate(row):
            if (r+1 < len(matrix)) and (c+1 < len(row)):
                if matrix[r][c] != matrix[r+1][c+1]:
                    return False
    return True

matrix = [
  [1, 2, 3, 4],
  [5, 1, 2, 3],
  [9, 5, 1, 2]
]
res = compute(matrix)
print(res)
  1. 三數之和 https://leetcode-cn.com/problems/3sum/

給定一個包含 n 個整數的數組nums,判斷nums中是否存在三個元素a,b,c,使得a + b + c = 0?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。
示例:

給定數組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合爲:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

疑問: 思路是什麼?

代碼:

nums = [-1, 0, 1, 2, -1, -4]
nums.sort()
result = []
nums2 = nums[1:]
nums3 = nums[2:]
for i in nums:
    for j in nums2:
        for k in nums3:
            if k >= j >= i and (i != j+1) and (j != k+1) and nums[i] + nums2[j] + nums3[k] == 0:
                temp = [nums[i], nums2[j], nums3[k]]
                temp.sort()
                if temp not in result:
                    result.append(temp)

print(result)
發佈了11 篇原創文章 · 獲贊 0 · 訪問量 1527
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章