leecode 27:移除元素
題目描述:
給你乙個陣列標籤:陣列、首尾指標nums
和乙個值val
,你需要原地
移除所有數值等於val
的元素,並返回移除後陣列的新長度length
。不要使用額外的陣列空間,你必須僅使用 o(1) 額外空間並
原地
修改輸入陣列。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
建立模型:
定義首、尾指標
首指標向右移動,且當首指標指向的值等於val
時,(交換首尾指標的值,尾指標向左移動)
重複第2步,直到首指標移動到尾指標的右邊
時間複雜度:o(n)
**實現:
# python實現
def remove_element(nums: list[int], val: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
if nums[left] == val:
nums[left], nums[right] = nums[right], nums[left]
right -= 1
else:
left += 1
# 由於while迴圈的條件設定為 i<=j, 所以最後 i 的值始終等於 len(新陣列)
return left
/* j**a實現 */
public int remove_element(int nums, int val)
else
} return left;
}
leecode 26:刪除有序陣列中的重複項
題目描述:
給你乙個 公升序排列的陣列標籤:陣列、快慢指標nums
,請你原地
刪除重複出現的元素,使每個元素只出現一次
,返回刪除後陣列的新長度length
。元素的相對順序
應該保持 一致 。由於在某些語言中不能改變陣列的長度,所以必須將結果放在陣列nums的第一部分。更規範地說,如果在刪除重複項之後有 k 個元素,那麼 nums 的前 k 個元素應該儲存最終結果。
將最終結果插入 nums 的前 k 個位置後返回 k 。
不要使用額外的空間,你必須在 原地 修改輸入陣列 並在使用 o(1) 額外空間的條件下完成
建立模型:
定義快、慢指標。(快指標指向當前元素,慢指標指向當前插入位置)
當快指標出現nums[fast] != nums[fast - 1]
,將快指標指向的當前元素插入慢指標指向的位置,快、慢指標同時向右移動
當快指標出現nums[fast] == nums[fast - 1]
,只向右移動快指標
重複步驟2,3,直至fast == nums.length
時間複雜度:o(n)
**實現:
# python實現
def remove_duplicates(nums:list[int]) -> int:
if not nums:
return 0
slow, fast = 1, 1
while fast < len(nums):
if nums[fast] != nums[fast - 1]:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
/* j**a實現 */
int remove_duplicates(int nums)
int slow = 1, fast = 1;
while (fast < nums.length)
fast += 1;
} return slow;
}
leecode 283:移動零
題目描述:
給定乙個陣列標籤:陣列、快慢指標nums
,編寫乙個函式將所有0
移動到陣列的末尾,同時保持非零元素的相對順序。請注意,必須在不複製陣列的情況下原地對陣列進行操作。
時間複雜度:o(n)
建立模型:
定義快、慢指標。(快指標指向當前元素,慢指標指向當前插入位置)
當快指標出現nums[right] != 0
,則交換快慢指標的值,快慢指標同時右移
當快指標出現nums[right] == 0
,則只向右移動快指標
重複步驟2,3,直到right == nums.length
**實現:
# python實現
def move_zeroes(self, nums: list[int]) -> none:
left, right = 0, 0
while right < len(nums):
if nums[right] != 0:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right += 1
return none
/* j**a實現 */
public void move_zeroes(int nums)
right += 1
} return;
}
LeeCode 陣列題目
leecode 485 最大連續 1 的個數 給定乙個二進位制陣列,計算其中最大連續 1 的個數。示例 輸入 1,1,0,1,1,1 輸出 3 解釋 開頭的兩位和最後的三位都是連續 1 所以最大連續 1 的個數是 3.輸入的陣列只包含 0 和 1 輸入陣列的長度是正整數,且不超過 10,000。遍歷...
leecode 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1,...
共享陣列原地逆置
偶然在一本書上看到這樣一道題覺得聽一意思的就拿來做了一下,題目是這樣設定的 在已知一維陣列a m n 中一次存放兩個線性表 a1,a2,a3,a4 am b1,b2,b3 bn 試寫出乙個函式將兩個順序表位置互換,即由 a,1,a2,a3,a4.am,b1,b2,b3.bn 轉換成 b1,b2,b3...