目录
1、按身高排序
class Solution:
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]:
n = len(names) #就计算names列表的长度
idx = list(range(n)) #返回一个下标列表,比如n = 5,则返回[0,1,2,3,4]
idx.sort(key=lambda x: heights[x], reverse=True) #按照height[x]里面的值的大小进行排序,因为是降序,所以翻转
res = []
for i in idx: #再一个一个加进去
res.append(names[i])
return res
2、两个非重叠子数组的最大和
3、删除链表的倒数第N个结点
4、有效时间的数目
class Solution:
def countTime(self, time: str) -> int:
# 简单模拟题,组合数学,疯狂分类讨论即可
ans = 1
if time[4] == "?": # mm为"x?",则"?"有10种情况
ans *= 10
if time[3] == "?": # mm为"?x",则"?"有6种情况
ans *= 6
if time[:2] == "??": # hh为"??",则"??"有24种情况
ans *= 24
elif time[1] == "?": # hh为"x?"(x不为?),则考虑x的值
if time[0] == "2": # x为2,则"?"有4种情况
ans *= 4
else: # x为0或1,则"?"有10种情况
ans *= 10
elif time[0] == "?": # hh为"?x"(x不为?),则考虑x的值
if time[1] >= "4": # x大于等于4,则"?"只能取0或1,有2种情况
ans *= 2
else: # x小于4,则"?"可以取0或1或2,有3种情况
ans *= 3
return ans # 所有可能的情况乘起来,简单的组合数学,即为答案
5、 可被k整除的最小整数
class Solution:
def smallestRepunitDivByK(self, k: int) -> int:
n = 1 % k #n是用来计算仅含1的整数的,k如果是1,则直接为0,否则为1
for i in range(1, k + 1):
if n == 0:
return i #如果一上来直接就==0,则证明k是1,不然则将继续
n = (n * 10 + 1) % k
return -1
6、合并两个有序数组
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
k = m + n - 1 #目标数组总长度, k是下标
while m > 0 and n > 0: #只要两个数组任意一个遍历完
if nums1[m-1] > nums2[n-1]: #1数组最后一个数比2数组最后一个数大
nums1[k] = nums1[m-1] #将1数组最后一个移到目标数组最后一个
m -= 1 #1数组的指针左移
else:
nums1[k] = nums2[n-1] #与上面一个if相反
n -= 1
k -= 1 #目标数组指针左移
nums1[:n] = nums2[:n] #题目性质保证了m肯定比n大,把nums2剩下来的直接拿过来放到目标数组前面
return nums1
7、 删除有序数组中的重复项2
class Solution(object):
def removeDuplicates(self, nums):
slow = 0
for fast in range(len(nums)):
if slow < 2 or nums[fast] != nums[slow - 2]: #前面的两个位置以及后面的判断,因为不能出现同一个数超过两次
nums[slow] = nums[fast]
slow += 1
return slow
8、 多数元素
class Solution:
def majorityElement(self, nums: List[int]) -> int:
# nums.sort()
# return nums[len(nums)//2] #出现次数大于n/2向下取整,那么就证明最多只有一个多数,而且在第一一半的位置肯定是这个数,不管他多大
#超过一般的为多数,可以使用一种方法叫做摩尔投票法
major = 0
count = 0
for n in nums:
if count == 0:
major = n
if n == major:
count += 1
else:
count -= 1
return major