4.2
忙起来情绪就会稳定,告别了斯德哥尔摩式痛苦带来的内啡肽后,发现做题真的是非常好的内啡肽上瘾患者代偿。
好好做题吧,当一个月快乐的小镇做题家~
class Solution:
def majorityElement(self, nums: List[int]) -> int:
for i in range(len(nums)):
num = nums[i]
a = len(nums)
b = nums.count(num)
if b >= a / 2:
return nums[i]
else:
return None
又一次遇到之前的问题了,打印出来2,2,none, none之类的
改进了一下:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
a = len(nums)
for i in range(a):
b = nums.count(nums[i])
if b >= a / 2:
return nums[i]
break
倒是应该能做出来,就是超出时间限制了呜呜(因为调用了count()函数,等同于写一遍循环找这个数字,类似于一层for循环了,只不过是调用api的形式,时间复杂度O(n^2))
用字典计数器做比较简单,记一下这个字典计数器:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
d = {}
a = len(nums) / 2
for i in nums:
if i in d.keys():
d[i] += 1
else:
d[i] = 1
if d[i] >= a:
return i
在运行[3, 3, 4]的时候报错了,错在最后两行写在if外面的意思是说如果d[列表最后一个元素]大于a才return i,所以要放在循环里面,如下:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
d = {}
a = len(nums) / 2
for i in nums:
if i in d:
d[i] += 1
else:
d[i] = 1
if d[i] >= a:
return i
additional一个一行的方式:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
return Counter(nums).most_common(1)[0][0]
不懂,下次一定
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
ls = sorted(arr)
ls1 = []
for i in range(k):
ls1.append(ls[i])
return ls1
起飞起来了!
官方这个看起来是一个思路,但是要简练很多:
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
arr.sort()
return arr[:k]