Chrome Pointer

2023年6月3日 星期六

Array Pyhton - LeetCode

  Remove Duplicates from Sorted Array

Example 1:

Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively. 

It does not matter what you leave beyond the returned k (hence they are underscores).

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16


  Best Time to Buy and Sell Stock II
Input: prices = [7,1,5,3,6,4]
Output: 7
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3. 

Total profit is 4 + 3 = 7.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22



  Rotate Array

Example 1:

Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

Submission Result: Wrong Answer More Details 

Input:[1,2,3,4,5,6] 11
Output:[6,5,4,3,2,1]
Expected:[2,3,4,5,6,1]















[1,2,3,4,5,6]
11

k = k % len(nums) #若沒加上這行 會error

11%6=5




  Contains Duplicate

Example 1:

Input: nums = [1,2,3,1]
Output: true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25


  Single Number

Example 1:

Input: nums = [2,2,1]
Output: 1

在Python中,^ 符號不是指數運算,而是按位異或(XOR)運算符。當你寫 a = 2^2 時,Python 將進行以下步驟:

  1. 22 轉換為二進位:

    • 2 的二進位表示是 10
    • 2 的二進位表示也是 10
  2. 對這兩個二進位進行按位異或運算:

    10
當你執行 `print(a)` 時,結果會是 `0`。 這是因為按位異或運算符 `^` 在每一位上,
因為當1碰到1 = 0 , 0碰到0 = 0

當改成a=2^2^3
a就會變成 a=3, 因為2^2=0,所以2^2^3=3

        # print(bin(2))
        # print(bin(3))
        # print(bin(1))
        # a=2^3^3
        # print(a)
class Solution: def singleNumber(self, nums: List[int]) -> int: ans=0 for i in range(len(nums)): ans^= nums[i] return ans

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

class Solution: def singleNumber(self, nums: List[int]) -> int: # Input: nums = [2,2,1] # Output: 1 count_dict={} for num in nums: if num in count_dict: count_dict[num]+=1 else: count_dict[num]=1 # Find the number that appears only once for key, value in count_dict.items(): if value == 1: return key





  Intersection of Two Arrays II

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25


  Plus One

Example 1:

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41


  Move Zeroes

Example 1:

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41


  Two Sum

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61



  Valid Sudoku

class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: def is_unit_valid(unit): filtered_unit = [] for i in unit: if i != '.': filtered_unit.append(i) return len(filtered_unit) == len(set(filtered_unit)) def is_subbox_valid(board, row, col): subbox = [] for i in range(row, row + 3): for j in range(col, col + 3): if board[i][j] != '.': subbox.append(board[i][j]) return len(subbox) == len(set(subbox)) # 檢查每一行 for row in board: if not is_unit_valid(row): return False # 檢查每一列 for col in range(9): column = [] for row in range(9): column.append(board[row][col]) if not is_unit_valid(column): return False # 檢查每個 3x3 子格 for i in range(0, 9, 3): for j in range(0, 9, 3): if not is_subbox_valid(board, i, j): return False return True


これは小さな秘密で、見せたくないです59f93f86-ee81-41b9-bf1d-d0827e0d4af8
  Rotate Image

要將 n x n 的 2D 矩陣順時針旋轉 90 度,並且必須在原地進行(不分配另一個 2D 矩陣),我們可以透過兩個步驟來完成這個任務:

  1. 先將矩陣轉置(交換矩陣的行和列)。
  2. 然後再反轉矩陣的每一行。

這兩個步驟的具體實現如下:

  1. 轉置矩陣:將 matrix[i][j] 與 matrix[j][i] 交換。
  2. 反轉每一行:將每一行的元素順序顛倒。
class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ n = len(matrix) # 轉置矩陣 for i in range(n): for j in range(i + 1, n): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] # 反轉每一行 for i in range(n): matrix[i].reverse() print(matrix)

matrix[i].reverse()matrix[i] = matrix[i][::-1] 這兩種方法都可以用來反轉列表,但在性能和可讀性上有所不同。

在大多數情況下,matrix[i].reverse() 通常比 matrix[i] = matrix[i][::-1] 更快,因為它是原地操作,不需要額外的內存分配和拷貝。

因此,matrix[i].reverse() 更好,尤其是在處理大數據量時,它更高效且更節省內存。

これは小さな秘密で、見せたくないですc918248c-3360-469b-9723-3afce81c8ac2

💫💫💫
qq=[1,2,3] 
 print(qq.reverse()) 

Q: 為何print出來是None?

當你使用 qq.reverse() 方法時,這個方法是用來反轉列表 qq 的順序,但它並不返回任何值,也就是說它是在原地修改列表,而不是返回一個新的列表。

因此,當你執行 print(qq.reverse()) 時,它會先執行 qq 的反轉操作,然後 reverse() 方法本身沒有返回值,所以 print() 顯示的是 None。正確的做法是先執行 qq.reverse(),然後直接打印 qq,而不是打印 qq.reverse() 的返回值。

例如:

qq = [1, 2, 3] qq.reverse() # 在原地反轉 qq print(qq) # 打印反轉後的 qq

這樣將會輸出:

[3, 2, 1]

你就可以看到 qq 列表已經被反轉過了。





沒有留言:

張貼留言

喜歡我的文章嗎? 喜歡的話可以留言回應我喔! ^^