27. 移除元素

解题思路

说实话,不要使用额外的数组空间,你必须仅使用O(1)额外空间并 原地 修改输入数组,这句没看懂。
第一次理解:应该是不能开辟新的数组来存储target = val的数,再看示例,可以用一个计数来实现。

第二次看随想录解析:
确实是返回新的数组大小,然后它内部会看你的数组有没有删掉或者处理,所以会显示输出你的数组长啥样,所以不能讨巧。
重点在于数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
所以方法就是用双指针,一个用来找,一个用来覆盖。

出现的问题

完全搞不懂到底要输出什么,返回的是不等于val的值,但是看它预计输出是处理好的nums数组。
写的代码如下:

function compare(a, b){
    return b-a
}
var removeElement = function(nums, val) {
    let total = 0
    for(let i=0; i<nums.length; i++){
        if(nums[i] === val){
            total += 1
            nums[i] = 0
        }
    }

    nums = nums.sort(compare)
    console.log(total)
    return total
};

JavaScript解法代码

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

Python解法代码

class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        slow = 0
        fast = 0
        while(fast < len(nums)):
            if(nums[fast] != val):
                nums[slow] = nums[fast]
                slow += 1
            fast += 1
        return slow

总结:

  1. 好久没用sort()了,回顾总结下
function compare(a, b){
    return b-a
}
Array.sort(compare)

a,b表示数组中的任意两个元素,

  • 若return > 0,b前a后,a-b输出从小到大排序;
  • 若reutrn < 0,a前b后,b-a输出从大到小排序。
  1. slow++++slow这个也回顾下:
  • slow++是运算完再+1
  • ++slow是+1完再运算
    python 没有
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容