天天看點

leetcode筆記———第一周(數組類)

1. (867) 給你一個二維整數數組 matrix, 傳回 matrix 的 轉置矩陣

三種方法:

1、循環破解,先定義空清單,然後依次将matrix行、列填入新數組的列、行。(一定注意行列是反的)

學到的python新用法:定義二維空清單

2、導入numpy包,利用numpy自帶的轉置指令進行操作,注意的是最後得到的結果是一個array,而不是清單,是以最後需要轉換為清單

import numpy as np

m = np.transpose(matrix).tolist()
return(m)
           

3、利用python自帶的**zip()**函數的性質來進行轉置

zip(*A)

x = [[1,2,3,4],['a','b','c'],[7,8,9]]
y = zip(*x)
print y

結果:
[(1, 'a', 7), 
 (2, 'b', 8), 
 (3, 'c', 9)]
           

注意的是,zip()函數轉化後得到的東西裡邊是元組tuple類型,是以一定要将其做一個list的強制轉換

··············································································

2.給定兩個大小分别為 m 和 n 的正序(從小到大)數組 nums1 和 nums2。請你找出并傳回這兩個正序數組的 中位數 。

這道題用python就很簡單,兩個清單直接相加合成新清單,然後對新清單進行排序,再來考慮單雙數取中位數就行了。

不過需要注意的是,使用的語言 python、python3是有小差異的:

python3: 5/2 = 2.5

python : 5/2 = 2 而 5/2.0 = 2.5

最開始用的python寫的直接除,一直等于整數,找了半天才發現是python版本的問題,一定要注意了。

如果要加上它的進階限制,即時間複雜度要在log下,那麼基本跑不掉的是用二分查找。

能夠把先把它轉化為在兩個清單中找第K小的數,那麼怎麼找才能使時間複雜度在log下,基本想法就是,兩個清單分别找第k/2小的數然後比較,再切掉不合适的,再将找第K小變為找第K-K/2小的數然後周遊下去,直到找到。但是在過程中得注意邊界的處理:1、上溢問題。2、某一個清單為空時。3、當K=1時。

https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/cong-yi-ban-dao-te-shu-de-fang-fa-dai-ma-jing-jian/

列如此方法。

·····················································································