Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 18 additions & 20 deletions array/0026-删除数据中重复项.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
## 题目地址
https://leetcode-cn.com/problems/search-insert-position
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
## 题目描述
给定一个**排序数组**和一个目标值
在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
存在以下几种情况:
* 目标值在数组所有元素之前
* 目标值等于数组中某一个元素
* 目标值插入数组中的位置
* 目标值在数组所有元素之后
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

### 暴力法
排序数组,找到第一个大于等于目标值的元素并返回索引,遍历结束都没有则返回最后一个位置
### 双指针
快慢两个指针,相等就跳过,不相等i++存到num[i]
```java
public class SearchInsert {
public int search(int[] nums, int target){
int length = nums.length;
for (int i=0;i<length;i++){
if (nums[i] >= target) return i;
public class Solution{
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {//前后两个比较,j=1
if (nums[j] != nums[i]) { //不相等的就加到nums[i]中,
i++; // i增加防止值被覆盖
nums[i] = nums[j]; // 不相等的值加入nums[i]数组中
}
return length;
}
return i + 1;
}
}
```
#### 复杂度分析
Expand Down
2 changes: 1 addition & 1 deletion array/0027-移除元素.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ https://leetcode-cn.com/problems/remove-element/
你不需要考虑数组中超出新长度后面的元素。

### 双指针
快慢两个指针,相等就跳过,不相等i++存到num[i]
快慢两个指针,相等就跳过,不相等nums[j]存到num[i],i++
```java
public class removeElement {
public int remove(int[] nums, int target){
Expand Down