当前位置: 首页 > 后端技术 > Node.js

【原创】一道90%人都做不到的笔试题

时间:2023-04-03 20:33:25 Node.js

关注《Java后端技术全栈》**回复“面试”获取各大面试数据数组操作全套制造商,有些确实更容易,但并非所有问题都如此。今天,我们就来看看90%的人都不会做的笔试题。请看题目:给你一个数组nums和一个值val,你需要原地移除所有值等于val的元素,并返回被移除数组的新长度。不要使用额外的数组空间,您只需使用O(1)额外空间并就地修改输入数组。元素的顺序可以改变。您不需要考虑数组中超出新长度的元素。例子:给定nums=[3,1,4,3],val=3,函数应该返回一个新的长度为2,而nums中的前两个元素都是2。你不需要考虑超出新长度的数组。请暂时不要看下面的内容,先想一想,看看有没有答案。看之前请三思!!!解题思路:现在考虑数组中待删除元素很少的情况。例如,num=[1,2,3,5,4],Val=4。按照很多人的想法,前四要素会被复制。事实上,我们不需要复制前四个元素。另一个例子是num=[4,1,2,3,5],Val=4。似乎也没有必要将元素1,2,3,5向左移动一位,因为问题描述中提到可以更改元素的顺序。意识到当我们遇到nums[i]=val时,我们可以将当前元素与最后一个元素交换并释放最后一个元素。这有效地将数组的大小减1。请注意,最后一个被交换的元素可能是您要删除的值。不过不用担心,在下一次迭代中,我们仍然会检查这个元素。最多遍历n步。在这个方法中,赋值操作的次数等于要移除的元素的数量。因此,如果要删除的元素很少,效率会更高。代码如下:PublicStaticIntRemoveElement(int[]nums,intVal){if(nums==NULL){return0;}inti=0;intn=nums.Length;about(i