力扣刷题 day38:10-08

1.矩阵中战斗力最弱的 K 行

给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。

请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。

如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。

军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。力扣刷题 day38:10-08_第1张图片

方法一:遍历+哈希表 

#方法一:遍历+哈希表
def kWeakestRows(mat,k):
    s={} #字典记录i对应的人数
    res=[]
    for i in range(len(mat)):
        tem=0
        for j in range(len(mat[i])):
            if mat[i][j]==0:
                break
            tem+=1
        s[i]=tem
    s=sorted(s.items(),key=lambda x : x[1]) #排序,按照value
    res=[]
    for i in range(k):
        res.append(s[i][0]) #添加元素
    return res

2.检查整数及其两倍数是否存在 

给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。

更正式地,检查是否存在两个下标 i 和 j 满足:

i != j
0 <= i, j < arr.length
arr[i] == 2 * arr[j]

力扣刷题 day38:10-08_第2张图片

方法一:集合去重 

#方法一:集合去重
def checkIfExist(arr):
    s=set() #去重功能
    for i in arr:
        if i%2==0 and (i//2 in s):
            return True #情况一
        elif i*2 in s:
            return True #情况二
        s.add(i) #添加元素
    return False

你可能感兴趣的:(力扣刷题,leetcode,算法,职场和发展)