理論部分
- 理解數組的存儲與分類。
- 實現動態數組,該數組能夠根據需要修改數組的長度。
- python中沒有數組這一說,和它對應的則是列表list和元組tuple。list對應爲其它與語言中的可變數組,而tuple對應爲不可變數組。元組和列表最大區別在於元組不可變。元組不支持元素的增加,不支持修改,刪除只能刪除整個元組。
- python中的集合set屬於數組嗎?
練習部分
以下用python實現:
- 利用動態數組解決數據存放問題
編寫一段代碼,要求輸入一個整數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)
- 託普利茨矩陣問題
如果一個矩陣的每一方向由左上到右下的對角線上具有相同元素,那麼這個矩陣是託普利茨矩陣。
給定一個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)
- 三數之和 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)