LeetCode OJ 27. Remove Element
Posted Black_Knight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode OJ 27. Remove Element相关的知识,希望对你有一定的参考价值。
Given an array and a value, 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 in place with constant memory.
The order of elements can be changed. It doesn‘t matter what you leave beyond the new length.
Example:
Given input array nums = [3,2,2,3]
, val = 3
Your function should return length = 2, with the first two elements of nums being 2.
Hint:
- Try two pointers.
- Did you use the property of "the order of elements can be changed"?
- What happens when the elements to remove are rare?
Subscribe to see which companies asked this question
【思路】
由于返回是数组的数字顺序可以改变,我们可以从后往前遍历。如果遇到的值和给定的val相同,则数组长度len-1,指针向前移动。如果遇到的值和val不同,则向前找到第一个和val值相同的数组元素,然后把这个元素和最后的元素交换位置。len = len - 1,尾指针继续向前移动。
举个例子,初始数组[3,2,2,3,4,3,5,5,3] val = 3
1. 尾指针 notval = len - 1 = 8,此时nums[notval] = 3,则指针向前移动,len - 1,数组变为[3,2,2,3,4,3,5,5]
2. notval = 7,nums[7] = 5 != 3,向前找到第一个等于3的数组元素,nums[5] = 3,此时令nums[5] = nums[7],len - 1,数组变为[3,2,2,3,4,5,5]
3. 重复上述过程,直到向前找不到值为val的数组元素,则可以返回[5,2,2,5,4,5]。
代码如下:
1 public class Solution { 2 public int removeElement(int[] nums, int val) { 3 if(nums==null || nums.length==0) return 0; 4 int len = nums.length; 5 int notval, isval; 6 for(notval = len - 1; notval >=0; notval--){ 7 if(nums[notval] == val) len = len - 1; 8 else{ 9 for(isval = notval - 1; isval >= 0; isval--) 10 if(nums[isval] == val) break; 11 if(isval < 0) return len; 12 else{ 13 nums[isval] = nums[notval]; 14 len = len - 1; 15 } 16 } 17 } 18 return len; 19 } 20 }
以上是关于LeetCode OJ 27. Remove Element的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode OJ 203Remove Linked List Elements
LeetCode OJ 26. Remove Duplicates from Sorted Array
LeetCode OJ Remove Duplicates from Sorted Array II
LeetCode OJ 80. Remove Duplicates from Sorted Array II