mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-12 22:55:19 +08:00
添加 problem 26
This commit is contained in:
@ -0,0 +1,56 @@
|
|||||||
|
package leetcode
|
||||||
|
|
||||||
|
func removeDuplicates(nums []int) int {
|
||||||
|
if len(nums) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
last, finder := 0, 0
|
||||||
|
for last < len(nums)-1 {
|
||||||
|
for nums[finder] == nums[last] {
|
||||||
|
finder++
|
||||||
|
if finder == len(nums) {
|
||||||
|
return last + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nums[last+1] = nums[finder]
|
||||||
|
last += 1
|
||||||
|
}
|
||||||
|
return last + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeDuplicates_(nums []int) int {
|
||||||
|
if len(nums) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
length := len(nums)
|
||||||
|
lastNum := nums[length-1]
|
||||||
|
i := 0
|
||||||
|
for i = 0; i < length-1; i++ {
|
||||||
|
if nums[i] == lastNum {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if nums[i+1] == nums[i] {
|
||||||
|
removeElement_(nums, i+1, nums[i])
|
||||||
|
// fmt.Printf("此时 num = %v length = %v\n", nums, length)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return i + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeElement_(nums []int, start, val int) int {
|
||||||
|
if len(nums) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
j := start
|
||||||
|
for i := start; i < len(nums); i++ {
|
||||||
|
if nums[i] != val {
|
||||||
|
if i != j {
|
||||||
|
nums[i], nums[j] = nums[j], nums[i]
|
||||||
|
j++
|
||||||
|
} else {
|
||||||
|
j++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return j
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package leetcode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type question26 struct {
|
||||||
|
para26
|
||||||
|
ans26
|
||||||
|
}
|
||||||
|
|
||||||
|
// para 是参数
|
||||||
|
// one 代表第一个参数
|
||||||
|
type para26 struct {
|
||||||
|
one []int
|
||||||
|
}
|
||||||
|
|
||||||
|
// ans 是答案
|
||||||
|
// one 代表第一个答案
|
||||||
|
type ans26 struct {
|
||||||
|
one int
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Problem26(t *testing.T) {
|
||||||
|
|
||||||
|
qs := []question26{
|
||||||
|
|
||||||
|
question26{
|
||||||
|
para26{[]int{1, 1, 2}},
|
||||||
|
ans26{2},
|
||||||
|
},
|
||||||
|
|
||||||
|
question26{
|
||||||
|
para26{[]int{0, 0, 1, 1, 1, 1, 2, 3, 4, 4}},
|
||||||
|
ans26{5},
|
||||||
|
},
|
||||||
|
|
||||||
|
question26{
|
||||||
|
para26{[]int{0, 0, 0, 0, 0}},
|
||||||
|
ans26{1},
|
||||||
|
},
|
||||||
|
|
||||||
|
question26{
|
||||||
|
para26{[]int{1}},
|
||||||
|
ans26{1},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("------------------------Leetcode Problem 26------------------------\n")
|
||||||
|
|
||||||
|
for _, q := range qs {
|
||||||
|
_, p := q.ans26, q.para26
|
||||||
|
fmt.Printf("【input】:%v 【output】:%v\n", p.one, removeDuplicates(p.one))
|
||||||
|
}
|
||||||
|
fmt.Printf("\n\n\n")
|
||||||
|
}
|
52
Algorithms/26. Remove Duplicates from Sorted Array/README.md
Normal file
52
Algorithms/26. Remove Duplicates from Sorted Array/README.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# [26. Remove Duplicates from Sorted Array](https://leetcode.com/problems/remove-duplicates-from-sorted-array/)
|
||||||
|
|
||||||
|
## 题目
|
||||||
|
|
||||||
|
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.
|
||||||
|
|
||||||
|
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
|
||||||
|
|
||||||
|
Example 1:
|
||||||
|
|
||||||
|
```c
|
||||||
|
Given nums = [1,1,2],
|
||||||
|
|
||||||
|
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.
|
||||||
|
|
||||||
|
It doesn't matter what you leave beyond the returned length.
|
||||||
|
```
|
||||||
|
|
||||||
|
Example 2:
|
||||||
|
|
||||||
|
```c
|
||||||
|
Given nums = [0,0,1,1,1,2,2,3,3,4],
|
||||||
|
|
||||||
|
Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.
|
||||||
|
|
||||||
|
It doesn't matter what values are set beyond the returned length.
|
||||||
|
```
|
||||||
|
|
||||||
|
Clarification:
|
||||||
|
|
||||||
|
Confused why the returned value is an integer but your answer is an array?
|
||||||
|
|
||||||
|
Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.
|
||||||
|
|
||||||
|
Internally you can think of this:
|
||||||
|
|
||||||
|
```c
|
||||||
|
// nums is passed in by reference. (i.e., without making a copy)
|
||||||
|
int len = removeElement(nums, val);
|
||||||
|
|
||||||
|
// any modification to nums in your function would be known by the caller.
|
||||||
|
// using the length returned by your function, it prints the first len elements.
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
print(nums[i]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 题目大意
|
||||||
|
|
||||||
|
这道题和第 27 题很像。给定一个有序数组 nums,对数组中的元素进行去重,使得原数组中的每个元素只有一个。最后返回去重以后数组的长度值。这道题和第 283 题,第 27 题基本一致,283 题是删除 0,27 题是删除指定元素,这一题是删除重复元素,实质是一样的。
|
||||||
|
|
||||||
|
这里数组的删除并不是真的删除,只是将删除的元素移动到数组后面的空间内,然后返回数组实际剩余的元素个数,OJ 最终判断题目的时候会读取数组剩余个数的元素进行输出。
|
Reference in New Issue
Block a user