2778. 特殊元素平方和
from typing import List
class Solution:
def sumOfSquares(self, nums: List[int]) -> int:
ans = 0
for i in range(len(nums)):
if len(nums) % (i + 1) == 0:
ans += nums[i] ** 2
return ans
2680. 最大或值
贪心算法
class Solution:
def maximumOr(self, nums: List[int], k: int) -> int:
left = [0 for i in range(len(nums))]
right = [0 for i in range(len(nums))]
left[0], right[-1] = nums[0], nums[-1]
for i in range(1, len(nums)):
left[i] = left[i - 1] | nums[i]
for i in range(len(nums) - 2, -1, -1):
right[i] = right[i + 1] | nums[i]
ans = 0
for i in range(len(nums)):
r = right[i + 1] if i + 1 < len(nums) else 0
l = left[i - 1] if i - 1 >= 0 else 0
if (tmp := r | l | (nums[i] << k)) > ans:
ans = tmp
return ans
2605. 从两个数字数组里生成最小数字
class Solution:
def minNumber(self, nums1: List[int], nums2: List[int]) -> int:
num = set(nums1) & set(nums2)
if num:
return min(num)
else:
return int("".join(sorted([str(min(nums1)), str(min(nums2))])))
LCR 111. 除法求值
from typing import List, Dict, Tuple
from collections import defaultdict
class Solution:
def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
graph = defaultdict(dict)
for i in range(len(equations)):
graph[equations[i][0]][equations[i][1]] = values[i]
graph[equations[i][1]][equations[i][0]] = 1 / values[i]
ans = []
for i in range(len(queries)):
if queries[i][0] not in graph or queries[i][1] not in graph:
ans.append(-1.0)
else:
cost = self.dfs(graph, queries[i][0], queries[i][1], 1.0, set())
ans.append(cost)
return ans
def dfs(self, graph: Dict[str, Dict[str, float]], start: str, end: str, cost: float, used: set):
if start == end:
return cost
for k, v in graph[start].items():
if k not in used:
used.add(k)
val = self.dfs(graph, k, end, cost * v, used)
if val != -1:
return val
used.discard(k)
return -1.0
821. 字符的最短距离
class Solution:
def shortestToChar(self, s: str, c: str) -> List[int]:
right = None
left = self.find_next(0, s, c)
ans = []
for i in range(len(s)):
right_dis = float('inf')
left_dis = float('inf')
if right is not None:
right_dis = abs(i - right)
if left is not None:
left_dis = abs(left - i)
ans.append(min(right_dis, left_dis))
if left_dis == 0:
right = left
left = self.find_next(i + 1, s, c)
return ans
def find_next(self, index, s, c):
for i in range(index, len(s)):
if s[i] == c:
return i
return None
Comments | NOTHING