前端学习记录Day2-Remove Element(Leetcode 27)

本文记录了在LeetCode上解决27题(Remove Element)的过程,探讨了两种不同的解决方案,包括使用双指针和JavaScript的splice()函数。作者反思了解题思路的重要性,并分享了在解题过程中学到的JavaScript知识点,如字符串indexOf方法和短路求值的概念。
摘要由CSDN通过智能技术生成

两个面试都挂掉了。感觉自己真的特别特别幸运能被第一家公司认可。也愈发觉得不能辜负他们的信任,真的要好好做,好好学,不要让他们后悔选到我😭。

这道Leetcode上的题是这样的:

Given an array nums and a value val, remove all instances of that value in-place and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

Example 1:

Given nums = [3,2,2,3], val = 3,

Your function should return length = 2, with the first two elements of nums being 2.

It doesn't matter what you leave beyond the returned length.

 中文简单概括一下,就是在原数组上进行操作,使值为val的元素都放到数组后面去,然后返回前面没被删除的元素的长度。换句话说,不要的元素也都被移除了。

实话说我到现在都不知道在解题的时候,应该怎样想思路(大概还是刷题刷的少吧)。以下有两种思路,均来自discussion board。


第一种方法:
用两个指针
思路是:做这个remove操作,实际上可以想作是将所有不是目标值val的元素值,按顺序依次赋值到数组里。
这样我们需要两个指针,一个指针跑得快,用来判断每个元素值是否与val相等;另一个指针跑得慢,每次赋值之后才会前进一位,这样才能保证赋值时是从头到尾按顺序一个一个来了。有了这个思路,代码该怎样写就清晰很多。
 


function removeElement(nums,val){
    if(!nums) return 0;
    let slow=0;
    for(let fast=0;fast<nums.length;fast++){
        if(nums[fast]!==val){
            nums[slow]=nums[fast];
            slow++;
        }
    
    }
    return slow;

}

第二种方法:
用JS自带的函数 splice()

这个方法的思路也很简单。
既然要remove掉所有值为val的元素,那自然就真的remove掉咯。这里就可以用到js中一个原生方法:splice()
在遍历数组的时候,如果遇到值为val的元素,就用splice()方法将这个元素删除掉。再接着遍历。遍历一遍之后,剩下的数组就正好是我们需要的(注意:原生JS中没有remove方法喔,remove方法是Jquery的)。


function removeElement(nums,val){
    if(!nums) return 0;
    for(let i=0;i<nums.length;i++){
        if(nums[i]===val){
            nums.splice(i,1);
            i--;//由于删除了一个元素,原本在i+1位置的元素前进了一个位置,所以这里要先减1
        }

    }
    return nums.length;
}

其实这些思路都很简单,为什么想的时候就是脑子乱乱的呢?也许以后写代码之前应该先把思路答出来,而不是在脑子里空想。然后再看着自己的思路再打。

今天学到的新的JS的一些函数方法啥的:(以后每天都记录一下把(๑•̀ㅂ•́)و✧

  1.  👻string的方法里有一个s1.indexOf(s2) 用处是可以返回字符串s1中,子字符串s2是从哪一个index开始的。如果这个不是s1的子字符串,就会返回-1。
  2. 👻函数返回的时候有时会有这种形式:
    return A && B;

    其中A和B都是表达式。这个其实代表的是:

    if (A){return B;}
    else  {return A;}

    相应的也有下面这种形式:

    return A || B;

    这其实代表的是:

    if (A) return A;
    else return B;

    这就是所谓的短路求值(short-circuit evaluation),很基础的知识啦,很多语言都是这样的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值