LeetCode -- 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.
就是把數組nums中的值為val的元素放在數組最後,返回新長度。
思路:
1.由於元素已有的順序可以被改變,因此可以使用兩個索引i和j進行兩頭找。j從後往前找值不為val的元素,i從前向後找值為val的元素,直到i與j相遇為止,交互nums[i]和nums[j]
2.然後繼續移動i,直到nums[i]為val為止,此時i的位置即為新長度,返回i即可。
實現代碼:
public class Solution {
public int RemoveElement(int[] nums, int val)
{
if(nums.Length == 0){
return 0;
}
var i = 0;
var j = nums.Length - 1;
while(i < j){
while(i < j && nums[i] != val){
i ++;
}
while(i < j && nums[j] == val){
j --;
}
if(i < j){
var t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
}
while(i < nums.Length && nums[i] != val){
i++;
}
return i;
}
}