27Remove Element
来源:互联网 发布:电脑打电话软件下载 编辑:程序博客网 时间:2024/06/06 07:35
题目链接:https://leetcode.com/problems/remove-element/
题目:
Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't matter what you leave beyond the new length.
解题思路:
1. i 指针从前向后扫描,遇到值为 val 的位置停下;j 指针从后向前扫描,遇到值为非 val 的位置停下。
2. 交换 i 和 j 位置的元素值。(可以不用交换直接覆盖)
3. 如果 i == j,则判断 i 当前位置的元素值是否为 val,若不为val,说明 i 扫描到了数组的末尾,且 i
之前(包括i)的元素都是有效元素,则长度为 i + 1。
4. 其余情况,i 值即为数组长度。
注意:
有几种特别的输入样例:
[3, 3] 3
[3, 3] 1
需要特别考虑!
nums[i] = nums[j];j --;
要比
nums[i] = nums[j --];
节省时间得多!
交换元素的方法:
public class Solution { public int removeElement(int[] nums, int val) { if(nums == null || nums.length == 0) return 0; int len = nums.length; if(len == 1) { if(nums[0] == val) return 0; else return 1; } int i = 0; int j = len - 1; while(i < j) { while(nums[i] != val && i < j) i ++; while(nums[j] == val && i < j) j --; if(nums[i] == val && nums[j] != val) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } if(nums[i] != val && i == j) { i ++; break; } } return i; }}
112 / 112 test cases passed.Status: AcceptedRuntime: 300 ms
后来想到了可以用 j 位置的元素直接覆盖 i 位置的元素
public class Solution { public int removeElement(int[] nums, int val) { if(nums == null || nums.length == 0) return 0; int len = nums.length; if(len == 1) { if(nums[0] == val) return 0; else return 1; } int i = 0; int j = len - 1; while(i < j) { while(nums[i] != val && i < j) i ++; while(nums[j] == val && i < j) j --; if(nums[i] == val && nums[j] != val) { nums[i] = nums[j]; j --; } if(nums[i] != val && i == j) { i ++; break; } } return i; }}
112 / 112 test cases passed.Status: AcceptedRuntime: 268 ms
0 0
- LeetCode(27)Remove Element
- [leetcode 27] Remove Element
- [leetcode 27] Remove Element
- 27、Remove Element
- [Leetcode] 27 - Remove Element
- leetcode|27|Remove Element
- LeetCode | #27 Remove Element
- LeetCode 27 : Remove Element
- LeetCode 27 Remove Element
- leetcode-27 Remove Element
- leetcode 27 Remove Element
- LeetCode 27 Remove Element
- LeetCode 27 Remove Element
- leetcode-27 Remove Element
- #27 Remove Element leetcode
- LeetCode---(27) Remove Element
- Leetcode 27 Remove Element
- LeetCode 27 - Remove Element
- Leetcode48 Rotate Image
- HDU 2191
- HDU2102 A计划 (基础BFS)
- JAVA中CLASS.FORNAME的含义
- flowplayer视频播放插件
- 27Remove Element
- C++ linux epoll并发服务器模型初探
- 代码从记事本拷贝到 source insight 工程出现中文乱码解决办法
- 我在使用的Xcode插件
- 【CF 515D】 Drazil and Tiles
- Hdoj 2527 Safe or Unsafe
- UVALive 3027 Corporative Network
- Improving the GPA 贪心 HDU4968
- iOS开发UI篇—CAlayer层的属性