[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)
这个写法比使用双指针写法执行时间和内存消耗都少