LeetCode(2023-10-26)


2778. 特殊元素平方和

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. 最大或值

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. 从两个数字数组里生成最小数字

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. 除法求值

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. 字符的最短距离

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

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-10-26)


我的朋友,理论是灰色的,而生活之树是常青的!