[LeetCode]2020/11/02

[LeetCode]2020/11/02

LeetCode 26- 题目描述

此题为LeetCode第26题。这是一道简单题,但是在查看题解时,看到使用python3写的一个小技巧记录一下。这个技巧忽视了题目空间复杂度为 O ( 1 ) O(1) O(1)的要求,但是是一个新思路。
在这里插入图片描述

  • Python set([iterable]) 函数

    创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

  • Python list.sort( key=None, reverse=False) 函数和 sorted(iterable, key=None, reverse=False) 函数

    • sort函数没有返回值,改变的就是原列表
    • sorted是新建一个可迭代对象,而不是在原先基础上做修改

Python3的小技巧

nums[:] = sorted(set(nums))
return len(nums)

为什么使用nums[:]而不是nums,因为题目要求是将原数组也改变。因为nums是作为参数传进来的,所以如果只是使用nums只是新创建了一个变量,在此修改就不是原来的nums

LeetCode 27-题目描述

此题为LeetCode第27题。这也是一道简单题,但是在查看题解时,看到新的解题思路和使用python3写的一个小技巧记录一下

在这里插入图片描述

另一种思路

通常是使用双指针正序遍历,时间复杂度应是 O ( 2 n ) O(2n) O(2n),作为改进可以使用倒序便利的方法让时间复杂度达到 O ( n ) O(n) O(n)

n = len(nums)
i = 0
while i < n:
    if nums[i] == val:
        nums[i] = nums[n-1]
        n -= 1
    else:
        i += 1
return i

Python3的小技巧

nums作为List类型,有一个remove函数,这个函数用于移除列表中某个值的第一个匹配项。所以可以使用以下写法解题:

for i in range(nums.count(val)):
	nums.remove(val)
return len(nums)

这个写法比使用双指针写法执行时间和内存消耗都少

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值