Leetcode刷题-枚举右,维护左

1

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        idx = {}
        for j , x in enumerate(nums):
            if target - x in idx:
                return [idx[target - x] , j]
            idx[x] = j
        

1512

python 复制代码
class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:
        res = 0
        idx = defaultdict(int)
        for x in nums:
            res += idx[x]
            idx[x] += 1
        return res
        

2001

python 复制代码
class Solution:
    def interchangeableRectangles(self, rectangles: List[List[int]]) -> int:
        idx = defaultdict(int)
        res = 0
        for l,d in rectangles:
            res += idx[l/d]
            idx[l/d] += 1
        return res

121

python 复制代码
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        res = 0
        minprice = prices[0]
        for p in prices:
            res = max(res,p-minprice)
            minprice = min(minprice,p)
        return res
        

2342

python 复制代码
class Solution:
    def maximumSum(self, nums: List[int]) -> int:
        def getN(num):
            s = 0
            t = num
            while t:
                s += t % 10
                t //= 10
            return s
        
        c = [-1] * 100
        res = -1
        for i in nums:
            k = getN(i)

            if c[k] > 0:
                res = max(res, i + c[k])
            c[k] = max(c[k], i)
        
        return res

2815

python 复制代码
class Solution:
    def maxSum(self, nums: List[int]) -> int:
        c = [-100] * 10
        res = -1
        for i in nums:
            t = i
            m = 0
            k = 0
            while t:
                k = t % 10
                t //= 10
                if m < k:
                    m = k
            if c[m] >= 1:
                res = max(res, i + c[m])
            c[m] = max(c[m], i)
        return res

1679

python 复制代码
class Solution:
    def maxOperations(self, nums: List[int], k: int) -> int:
        nums.sort()
        left = 0
        right = len(nums) - 1
        res = 0
        while left < right:
            n = nums[left] + nums[right]
            if n == k:
                res += 1
                left += 1
                right -= 1
            elif n > k:
                right -= 1
            else:
                left += 1
        return res

219

python 复制代码
class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        res = 0
        idx = {}
        for j,x in enumerate(nums):
            if x in idx:
                if j - idx[x] <= k:
                    return True
            idx[x] = j
        return False
            
        

2260

python 复制代码
class Solution:
    def minimumCardPickup(self, cards: List[int]) -> int:
        s = {}
        k = 0
        res = 100001
        for i in range(len(cards)):
            if cards[i] in s:
                res = min(res, i - s[cards[i]] + 1)
            s[cards[i]] = i
        if res == 100001:
            return -1
        return res

624

python 复制代码
class Solution:
    def maxDistance(self, arrays: List[List[int]]) -> int:
        m = max(arrays[0])
        n = min(arrays[0])
        res = 0 
        for i in range(1, len(arrays)):
            l = max(arrays[i])
            k = min(arrays[i])
            res = max(abs(l - n), res)
            res = max(abs(k - m), res)
            m = max(l, m)
            n = min(n, k)
        return res

1010

python 复制代码
class Solution:
    def numPairsDivisibleBy60(self, time: List[int]) -> int:
        cnt = [0] * 60
        res = 0
        for i in time:
            n = i % 60
            res += cnt[(60 - n) % 60]
            cnt[n] += 1
        return res

3185

python 复制代码
class Solution:
    def countCompleteDayPairs(self, hours: List[int]) -> int:
        cnt = [0] * 24
        res = 0
        for i in hours:
            n = i % 24
            res += cnt[(24 - n) % 24]
            cnt[n] += 1
        return res

2506

python 复制代码
class Solution:
    def similarPairs(self, words: List[str]) -> int:
        s = {}
        res = 0
        for i in words:
            c = ""
            for j in range(len(i)):
                if i[j] not in c:
                    c += i[j]
            cnt = "".join(sorted(c))
            if cnt in s:
                res += s[cnt]
                s[cnt] += 1
            else:
                s[cnt] = 1
        return res

2748

python 复制代码
class Solution:
    def countBeautifulPairs(self, nums: List[int]) -> int:
        f = {}
        res = 0
        for i in nums:
            t = i
            l = 0
            while t:
                l = t % 10
                t //= 10
            for j in f:
                if gcd(j, i % 10) == 1:
                    res += f[j]
            if l in f:
                f[l] += 1
            else:
                f[l] = 1
        return res

2874

python 复制代码
class Solution:
    def maximumTripletValue(self, nums: List[int]) -> int:
        ans = max_diff = pre_max = 0
        for x in nums:
            ans = max(ans, max_diff * x)
            max_diff = max(max_diff, pre_max - x)
            pre_max = max(pre_max, x)
        return ans

3371

python 复制代码
class Solution:
    def getLargestOutlier(self, nums: List[int]) -> int:
        cnt = Counter(nums)
        total = sum(nums)

        ans = -inf
        for x in nums:
            cnt[x] -= 1
            if (total - x) % 2 == 0 and cnt[(total - x) // 2] > 0:
                ans = max(ans, x)
            cnt[x] += 1
        return ans

1014

python 复制代码
class Solution:
    def maxScoreSightseeingPair(self, values: List[int]) -> int:
        res = 0
        pre = 0
        for i, x in enumerate(values):
            res = max(res, pre + x - i)
            pre = max(pre, x + i)
        return res

1814

python 复制代码
class Solution:
    def countNicePairs(self, nums: List[int]) -> int:
        mod = 10**9 + 7
        dic = {}
        res = 0
        def rev(num):
            t = str(num)
            n = len(t)
            r = ""
            for i in range(n - 1, -1, -1):
                r += t[i]
            return int(r)
        for i in nums:
            t = rev(i)
            t = i - t
            if t in dic:
                res += dic[t]
                dic[t] += 1
            else:
                dic[t] = 1
        return res % mod

2905

python 复制代码
class Solution:
    def findIndices(self, nums: List[int], indexDifference: int, valueDifference: int) -> List[int]:
        max_idx = min_idx = 0
        for j in range(indexDifference, len(nums)):
            i = j - indexDifference
            if nums[i] > nums[max_idx]:
                max_idx = i
            elif nums[i] < nums[min_idx]:
                min_idx = i
            if nums[max_idx] - nums[j] >= valueDifference:
                return [max_idx, j]
            if nums[j] - nums[min_idx] >= valueDifference:
                return [min_idx, j]
        return [-1, -1]
相关推荐
VidDown5 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
leobertlan5 小时前
痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析
算法·程序员
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
开发小能手1236 小时前
答案daanC语言
数据结构·算法
死磕音视频7 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林7 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
Navigator_Z7 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
pride.li9 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook9 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺9 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python