From 49e3d1012b54df9f0ed5cc2d58e21468d35cc69a Mon Sep 17 00:00:00 2001 From: YDZ Date: Mon, 29 Apr 2019 08:30:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20problem=2027?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../27. Remove Element/27. Remove Element.go | 19 ++++++ .../27. Remove Element_test.go | 68 +++++++++++++++++++ Algorithms/27. Remove Element/README.md | 56 +++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 Algorithms/27. Remove Element/27. Remove Element.go create mode 100644 Algorithms/27. Remove Element/27. Remove Element_test.go create mode 100644 Algorithms/27. Remove Element/README.md diff --git a/Algorithms/27. Remove Element/27. Remove Element.go b/Algorithms/27. Remove Element/27. Remove Element.go new file mode 100644 index 00000000..f0233b6a --- /dev/null +++ b/Algorithms/27. Remove Element/27. Remove Element.go @@ -0,0 +1,19 @@ +package leetcode + +func removeElement(nums []int, val int) int { + if len(nums) == 0 { + return 0 + } + j := 0 + for i := 0; i < len(nums); i++ { + if nums[i] != val { + if i != j { + nums[i], nums[j] = nums[j], nums[i] + j++ + } else { + j++ + } + } + } + return j +} diff --git a/Algorithms/27. Remove Element/27. Remove Element_test.go b/Algorithms/27. Remove Element/27. Remove Element_test.go new file mode 100644 index 00000000..fa3a1653 --- /dev/null +++ b/Algorithms/27. Remove Element/27. Remove Element_test.go @@ -0,0 +1,68 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question27 struct { + para27 + ans27 +} + +// para 是参数 +// one 代表第一个参数 +type para27 struct { + one []int + two int +} + +// ans 是答案 +// one 代表第一个答案 +type ans27 struct { + one int +} + +func Test_Problem27(t *testing.T) { + + qs := []question27{ + + question27{ + para27{[]int{1, 0, 1}, 1}, + ans27{1}, + }, + + question27{ + para27{[]int{0, 1, 0, 3, 0, 12}, 0}, + ans27{3}, + }, + + question27{ + para27{[]int{0, 1, 0, 3, 0, 0, 0, 0, 1, 12}, 0}, + ans27{4}, + }, + + question27{ + para27{[]int{0, 0, 0, 0, 0}, 0}, + ans27{0}, + }, + + question27{ + para27{[]int{1}, 1}, + ans27{0}, + }, + + question27{ + para27{[]int{0, 1, 2, 2, 3, 0, 4, 2}, 2}, + ans27{5}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 27------------------------\n") + + for _, q := range qs { + _, p := q.ans27, q.para27 + fmt.Printf("【input】:%v 【output】:%v\n", p.one, removeElement(p.one, p.two)) + } + fmt.Printf("\n\n\n") +} diff --git a/Algorithms/27. Remove Element/README.md b/Algorithms/27. Remove Element/README.md new file mode 100644 index 00000000..ecf42c8f --- /dev/null +++ b/Algorithms/27. Remove Element/README.md @@ -0,0 +1,56 @@ +# [27. Remove Element](https://leetcode.com/problems/remove-element/) + +## 题目 + +Given an array nums and a value val, remove all instances of that value in-place 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. + +The order of elements can be changed. It doesn't matter what you leave beyond the new length. + +Example 1: + +```c +Given nums = [3,2,2,3], val = 3, + +Your function should return length = 2, with the first two elements of nums being 2. + +It doesn't matter what you leave beyond the returned length. +``` + +Example 2: + +```c +Given nums = [0,1,2,2,3,0,4,2], val = 2, + +Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4. + +Note that the order of those five elements can be arbitrary. + +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]); +} +``` + +## 题目大意 + +这道题和第 283 题很像。给定一个数组 nums 和一个数值 val,将数组中所有等于 val 的元素删除,并返回剩余的元素个数。这道题和第 283 题基本一致,283 题是删除 0,这一题是给定的一个 val,实质是一样的。 + +这里数组的删除并不是真的删除,只是将删除的元素移动到数组后面的空间内,然后返回数组实际剩余的元素个数,OJ 最终判断题目的时候会读取数组剩余个数的元素进行输出。