419. 甲板上的战舰
乍一眼 以为是并查集 但是其实可以简单扫一遍判断就行, 因为没有相邻战舰, 所以碰见一个 X 就判断是否他左边是 或者上面是 都不是的话就 +1 否则 就不+ 然后 就行了
class Solution:
def countBattleships(self, board: List[List[str]]) -> int:
res = 0
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 'X':
if i >0 and board[i-1][j] =='X':
continue
elif j > 0 and board[i][j-1] == 'X':
continue
else:
res += 1
return res
1356. 根据数字二进制下 1 的数目排序
先 计算每个数字 对应的二进制1的数目 , 使用 num &=(num-1) 这个方法有几个数就进行多少次 最快
然后 计算完可以存一个哈希 然后 每个排序合并 也可以 一起排序再拆开
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
lis = [0] *len(arr)
dic =defaultdict(list)
for i in range(len(arr)):
one = 0
num = arr[i]
while num :
one += 1
num &=(num-1)
dic[one].append(arr[i])
res = []
#print(dic)
for i in range(16):
if dic[i]:
dic[i].sort()
res +=dic[i]
return res
#res = sorted(zip(arr,lis),key=lambda x:(x[1],x[0]))
#print(res)
# for i in zip(*res):
# return list(i)