陣列:總結篇
- 二分查找 (Binary Search) - 題號:704
題目描述:給定一個按照升序排列的整數陣列 nums,和一個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。
def search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
- 移除元素 (Remove Element) - 題號:27
題目描述:給你一個陣列 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,並返回移除後陣列的新長度。
def removeElement(nums, val):
i = 0
for j in range(len(nums)):
if nums[j] != val:
nums[i] = nums[j]
i += 1
return i
- 有序陣列的平方 (Squares of a Sorted Array) - 題號:97
題目描述:給定一個按非遞減順序排序的整數陣列 nums,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。
def sortedSquares(nums):
n = len(nums)
result = [0] * n
left, right = 0, n - 1
for i in range(n - 1, -1, -1):
if abs(nums[left]) > abs(nums[right]):
result[i] = nums[left] ** 2
left += 1
else:
result[i] = nums[right] ** 2
right -= 1
return result
- 長度最小的子陣列 (Minimum Size Subarray Sum) - 題號:209
題目描述:給定一個含有 n 個正整數的陣列和一個正整數 s,找出該陣列中滿足其和 ≥ s 的長度最小的連續子數組,並返回其長度。如果不存在符合條件的連續子陣列,返回 0。
def minSubArrayLen(s, nums):
n = len(nums)
left = 0
min_len = float('inf')
curr_sum = 0
for right in range(n):
curr_sum += nums[right]
while curr_sum >= s:
min_len = min(min_len, right - left + 1)
curr_sum -= nums[left]
left += 1
return min_len if min_len != float('inf') else 0
- 螺旋矩陣II (Spiral Matrix II) - 題號:59
題目描述:給定一個正整數 n,生成一個包含 1 到 n^2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣。
def generateMatrix(n):
matrix = [[0] * n for _ in range(n)]
top, bottom, left, right = 0, n - 1, 0, n - 1
num = 1
while num <= n*n:
for i in range(left, right + 1):
matrix[top][i] = num
num += 1
top += 1
for i in range(top, bottom + 1):
matrix[i][right] = num
num += 1
right -= 1
for i in range(right, left - 1, -1):
matrix[bottom][i] = num
num += 1
bottom -= 1
for i in range(bottom, top - 1, -1):
matrix[i][left] = num
num += 1
left += 1
return matrix