|
10 | 10 |
|
11 | 11 | ## 常见题型
|
12 | 12 |
|
| 13 | +### [移除元素](https://leetcode.cn/problems/remove-element/) |
| 14 | +> 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 |
| 15 | +> 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 |
| 16 | +> 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 |
| 17 | + |
| 18 | +思路:两种方法,一是倒序便利,不断删除等于val的元素,剩下的就是新书组;二是正向遍历去使用快慢指针,不断把不等于val的元素给变换到数组的前边 |
| 19 | + |
| 20 | +**Python版本一** |
| 21 | +```python |
| 22 | +class Solution: |
| 23 | + def removeElement(self, nums: List[int], val: int) -> int: |
| 24 | + if len(nums) == 0: return 0 |
| 25 | + i = len(nums) - 1 |
| 26 | + while i >= 0: |
| 27 | + if nums[i] == val: nums.pop(i) |
| 28 | + i = i - 1 |
| 29 | + return len(nums) |
| 30 | +``` |
| 31 | + |
| 32 | +**Python版本二** |
| 33 | +```python |
| 34 | +class Solution: |
| 35 | + def removeElement(self, nums: List[int], val: int) -> int: |
| 36 | + if len(nums) == 0: return 0 |
| 37 | + slow = 0 |
| 38 | + for i in range(len(nums)): |
| 39 | + if nums[i] == val: continue |
| 40 | + else: |
| 41 | + nums[slow] = nums[i] |
| 42 | + slow = slow + 1 |
| 43 | + return slow |
| 44 | +``` |
| 45 | + |
| 46 | +### [删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/) |
| 47 | +>给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 |
| 48 | +> |
| 49 | +>由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 |
| 50 | +> |
| 51 | +>将最终结果插入 nums 的前 k 个位置后返回 k 。 |
| 52 | +> |
| 53 | +>不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 |
| 54 | + |
| 55 | +思路: 同样的快慢指针 |
| 56 | + |
| 57 | +**Python版本** |
| 58 | +```python |
| 59 | +class Solution: |
| 60 | + def removeDuplicates(self, nums: List[int]) -> int: |
| 61 | + slow, i = 0, 0 |
| 62 | + while i < len(nums): |
| 63 | + while i < len(nums) - 1 and nums[i] == nums[i + 1]: |
| 64 | + i = i + 1 |
| 65 | + nums[slow] = nums[i] |
| 66 | + slow = slow + 1 |
| 67 | + i = i + 1 |
| 68 | + |
| 69 | + return slow |
| 70 | +``` |
| 71 | + |
| 72 | +### [移动零](https://leetcode.cn/problems/move-zeroes/) |
| 73 | +> 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 |
| 74 | +> 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 |
| 75 | + |
| 76 | +**Python版本** |
| 77 | +```python |
| 78 | +class Solution: |
| 79 | + def moveZeroes(self, nums: List[int]) -> None: |
| 80 | + """ |
| 81 | + Do not return anything, modify nums in-place instead. |
| 82 | + """ |
| 83 | + slow = 0 |
| 84 | + for i in range(len(nums)): |
| 85 | + if nums[i] == 0: continue |
| 86 | + else: |
| 87 | + nums[slow] = nums[i] |
| 88 | + slow = slow + 1 |
| 89 | + |
| 90 | + while slow < len(nums): |
| 91 | + nums[slow] = 0 |
| 92 | + slow = slow + 1 |
| 93 | + return nums |
| 94 | + ``` |
| 95 | + |
| 96 | + |
13 | 97 | ### [spiral-matrix](https://leetcode-cn.com/problems/spiral-matrix/)
|
14 | 98 |
|
15 | 99 | > 给定一个包含 *m* x *n* 个元素的矩阵(*m* 行, *n* 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
|
|
0 commit comments