时间复杂度
O
(
m
+
n
)
O(m+n)
O(m+n),空间复杂度
O
(
1
)
O(1)
O(1)
2. [简单] 移除元素
题目链接
难度:简单
标签:数组、双指针
2.1 解法1:双指针
左右两个指针都初始化指向 0 索引位置,右指针遍历数组 nums,将不等于 val 的元素复制到左指针位置,并把左指针右移一格,当右指针遍历完成时,左指针索引位置即为新长度
classSolution:defremoveElement(self, nums: List[int], val:int)->int:
left =0for right inrange(len(nums)):if nums[right]!= val:
nums[left]= nums[right]
left +=1return left
classSolution:defremoveDuplicates(self, nums: List[int])->int:
left =1for right inrange(1,len(nums)):if nums[right]!= nums[right-1]:
nums[left]= nums[right]
left +=1return left
时间复杂度
O
(
n
)
O(n)
O(n),空间复杂度
O
(
1
)
O(1)
O(1)
4. [中等] 删除有序数组中的重复项 II
题目链接
标签:数组、双指针
4.1 解法1:双指针+计数
和上一题思路一致,但是增加一个计算器以允许保留一个重复元素
classSolution:defremoveDuplicates(self, nums: List[int])->int:
left, cnt =1,1for right inrange(1,len(nums)):if nums[right]!= nums[right-1]:# 元素值变化,重置计数器
nums[left]= nums[right]
left +=1
cnt =1else:# 元素值不变,计数器加1
cnt +=1if cnt <=2:# 允许保留一个重复元素
nums[left]= nums[right]
left +=1return left
classSolution:defremoveDuplicates(self, nums: List[int])->int:
left, right =2,2for right inrange(2,len(nums)):if nums[right]!= nums[left-2]:
nums[left]= nums[right]
left +=1return left
defmajorityElement(self, nums: List[int])->int:
cnts ={}
limit =len(nums)//2for num in nums:if num notin cnts:
cnts[num]=1else:
cnts[num]+=1if cnts[num]> limit:breakreturn num
时间复杂度
O
(
n
)
O(n)
O(n),空间复杂度
O
(
n
)
O(n)
O(n)
5.2 解法2:排序
利用众数的性质,当数组元素单调递增排序时,索引为
⌊
n
2
⌋
\lfloor\frac{n}{2}\rfloor
⌊2n⌋ 的元素一定是众数
defmajorityElement(self, nums: List[int])->int:def_rec(lo, hi):# 递归边界:长度为1的列表中众数就是元素本身if lo == hi:return nums[lo]# 分治递归计算左右两部分的众数
mid =(hi - lo)//2+ lo
left = _rec(lo, mid)
right = _rec(mid +1, hi)# 左右众数相等,则本段众数也一致if left == right:return left
# 左右众数不等,则本段众数为出现更多的那个
left_count =sum(1for i inrange(lo, hi +1)if nums[i]== left)
right_count =sum(1for i inrange(lo, hi +1)if nums[i]== right)return left if left_count > right_count else right
return _rec(0,len(nums)-1)
时间复杂度
O
(
n
log
n
)
O(n\log n)
O(nlogn),空间复杂度
O
(
log
n
)
O(\log n)
O(logn)
5.4 解法4:Boyer-Moore 投票算法
之前的方法都没法实现
O
(
n
)
O(n)
O(n) 的时间复制度和
O
(
1
)
O(1)
O(1) 的空间复杂度,为了实现这个要求,必须在常数次遍历过程中确定众数,并且不设置任何额外空间。一个巧妙的想法是,把数组元素想象成消消乐游戏,不同的元素就消除掉,这样最后剩下的就一定是众数
1、INI存储
INI 文件是一种简单的文本文件格式,通常用于在 Windows 环境中存储配置数据。INI 文件格式由一系列节(section)和键值对(key-value pairs)组成,用于表示应用程序的配置信息。一个典型的 INI 文…
本小节介绍 Linux 用户的基础知识,了解 Linux 系统中有哪些用户,如何查看当前 Linux 系统中有哪些用户,每一个 Linux 用户的权限取决于这些账号登录时获取到的权限。 1. Linux 用户类型
Linux 系统是一个多用户多任务的操作系统,…