交易猫假网站制作,做平面设计有前途吗,微网站开发平台有哪些,网站 默认页一、题目描述 给你一个数组 nums 和一个值 val#xff0c;你需要 原地 移除所有数值等于 val 的元素#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超…一、题目描述 给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。 不要使用额外的数组空间你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 二、思路分析 你拿到了这样的一道题原地移除数组中所有的元素val。在你的考场上你知道这场考试对你来说十分重要看到这道题你不由得震惊住了过于简单当你看到此题时便拥有了以下思路定义一个新数组一一对比然后把符合的放入到新的数组中不符合的跳过类似代码如下
int removeElement(int* nums, int numsSize, int val)
{int arr[] { 0 };int src 0;int dest 0;while (src numsSize){if (nums[src] val){src;}else{arr[dest] arr[src];}}return arr;
} 在你思考时已经有人交卷了所幸时间很长但你敲写代码时突然弹出一个提示不要使用额外的数组空间你必须仅使用 O(1) 额外空间并 原地修改输入数组。 你被吓出一声冷汗所幸没有写那么快你不由得重新思考你脑海中浮现了以下画面一对夫妇在朝着一个共同得目标前进一个快一点一个慢一点于是跑的快的先去寻找目标找到了给慢的那一个然后继续前进那个慢的也离目标近一点但不管跑的快的找没找到都会走到生命尽头留下慢的一方。 想到这你恍然大悟原本的无厘头也有了思路于是你敲出如下代码
三、代码实现双指针法
int removeElement(int* nums, int numsSize, int val) {int slow 0;int fast 0; //一对夫妇原本都是零起点while (fast numsSize) { //但是有一个跑得快一个跑得慢if (nums[fast] ! val) { //于是跑得快的那个先去寻找共同目标nums[slow] nums[fast]; //如果找到了就送给跑得慢的那个slow; //然后跑得慢的那个也就离目标近一点}fast; //但是不管是否找得到跑得快的那方都一直奔跑到生命的尽头}return slow; //最终留下跑得慢的一方
} 你顺利的完成了考试在那个下午那个你恍惚的下午
完