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]
相关推荐
独好紫罗兰1 分钟前
对python的再认识-基于数据结构进行-a008-集合-拓展
开发语言·数据结构·python
_OP_CHEN1 分钟前
【算法基础篇】(五十九)巴什博弈 (Bash Game) 超详解:从原理到实战,搞定经典取石子问题
算法·蓝桥杯·c/c++·博弈论·算法竞赛·acm/icpc·bash博弈
YGGP2 分钟前
【Golang】LeetCode 15. 三数之和
leetcode
冷雨夜中漫步8 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴9 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再9 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
颜酱10 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_7369191010 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi98783810 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
喵手10 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控