大家好,今天我给大家带来了一些Leetcode上一些关于数组的题目,话不多说咱们往下看:
第一题:移除元素
先给大家分析一下题目:它的参数给了一个数组nums,然后呢numsSize也就是数组的长度,val就是咱们要移除元素的值,而且本题要求了不能使用额外空间,也就是空间复杂度为O(1),那这题咱们就只能在原数组中进行修改,最终呢,返回数组的长度,当然这里的长度指的是移除完部val值之后的长度
解法一:双指针法
我先是定义了两个变量一个left=0,right=numSize-1,right也就是数组的最后一个元素的下标 ,我们可以把所有等于val的值都换到数组后面,所以当nus[right]==val的时候我们得将right--,因为如果不right--,后面的val会被换到前面去,然后right会在不等于val的位置停下来,接下来我们只需要让left去找等于val的值,然后让它们交换一下位置即可,所以我在这里写了一个交换函数swap,当他们交换完之后nums[left]位置就已经不是val了,而nums[right]位置的值为val,这里我们交换完之后还要left++,right--,其他情况我们只需要left++即可,接下来一直交换的过程,所以我这里给了一个while循环,控制循环条件的话必须是left<=right的时候停下来,而不能