代码随想录训练营第一天 | 27.移除元素
date
Jul 17, 2024
slug
Leetcode-arrary-27
status
Published
tags
数组
Arrary
Leetcode
summary
数组理论基础 27.移除元素训练
type
Post
27.移除元素
Question
给定一个n
个元素有序的(升序)整型数组nums
和一个目标值target
,写一个函数搜索nums
中的target
,如果目标值存在返回下标,否则返回-1
。假设nums
中不等于val
的元素数量为k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。
- 返回
k
。用户评测:评测机将使用以下代码测试您的解决方案:如果所有的断言都通过,你的解决方案将会 通过。
示例 :
Example 1:
Example 2:
Idea
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
解题思路
Solution 1 快慢指针法(重要)
Solution 2 暴力解
Solution 3 相向双指针法(高效)
高效性的原因
- 单次遍历:这个算法在最坏情况下也只需要遍历数组一次。虽然内部有两个循环,但它们分别处理左指针和右指针,整体上每个元素最多只会被处理一次。因此时间复杂度是 O(n),其中 n 是数组的长度。
- 双指针法:通过一个指针从左向右遍历(left 指针),另一个指针从右向左遍历(right 指针),可以同时检查和交换元素。这样做可以有效地减少不必要的操作和重复检查。
- 原地操作:该算法不需要额外的空间来存储数组的副本,只在原数组上进行操作,空间复杂度是 O(1)。
总结
这些实现方法并没有改变元素的相对位置