Javascript leetcode.com-删除元素-为什么';ti++;工作
我正在研究leetcode的一个算法 以下是描述: 给定一个数组和一个值,请在中删除该值的所有实例 放置并返回新的长度。不要为这些文件分配额外的空间 另一个数组,必须使用恒定内存就地执行此操作。这个 元素的顺序可以更改。不管你留下什么 超出新的长度。示例:给定的输入数组nums=[3,2,2,3], val=3您的函数应该返回length=2,其中前两个 NUM的元素为2 我的问题基于以下代码:Javascript leetcode.com-删除元素-为什么';ti++;工作,javascript,algorithm,Javascript,Algorithm,我正在研究leetcode的一个算法 以下是描述: 给定一个数组和一个值,请在中删除该值的所有实例 放置并返回新的长度。不要为这些文件分配额外的空间 另一个数组,必须使用恒定内存就地执行此操作。这个 元素的顺序可以更改。不管你留下什么 超出新的长度。示例:给定的输入数组nums=[3,2,2,3], val=3您的函数应该返回length=2,其中前两个 NUM的元素为2 我的问题基于以下代码: var removeElement = function(nums, val) { var
var removeElement = function(nums, val) {
var count = 0;
for(i=0; i<nums.length; i++){
if(nums[i] == val) {
nums.splice(i,1);
i--;
}
}
};
var removelement=函数(nums,val){
var计数=0;
for(i=0;iSplice从数组中删除i处的元素,因此如果要继续正常迭代,则需要保持在当前位置。由于for循环中有一个i++,它通常会向前移动一个位置。因此,在保持在相同位置之前,需要向后移动一步
nums=[3,2,2,3]
val=3;
//first iteration
i=0
current=3//===val
nums.splice(0,1);//nums=[2,2,3]
i--;//i=-1
//next iteration
i++;//i=0
current=2;
//next iteration
i++;//i=1
current=2;
//next iteration
i++;//i=2
current=3;
nums.splice(2,1);//nums=[2,2]
i--;//i=1
//next iteration
i++;//i=2 === nums.length => break
在[3,2,2,3]的情况下,使用i++而不是i并不重要,因为它会跳过不相关的索引1和2