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]
相关推荐
哈喽小疯车4 分钟前
Python 实现大文件的高并发下载
python
软件算法开发1 小时前
基于卡尔曼滤波的雷达光电多目标航迹融合算法matlab仿真
算法·matlab·卡尔曼滤波·雷达光电·多目标航迹融合
墨痕_7772 小时前
基于Matlab设计GUI图像处理交互界面
python
吐泡泡科技2 小时前
MATLAB风光柴储微网粒子群算法
算法·matlab·粒子群算法·风光柴储微网
不吃元西2 小时前
leetcode top100矩阵题73.54.48.240
算法·leetcode·矩阵
subject625Ruben2 小时前
Matlab多种算法解决未来杯B的多分类问题
人工智能·算法·机器学习·数学建模·matlab·分类·未来杯
Tacy02133 小时前
Conda+jupyterlab
python·jupyter·conda·ai编程
程序员三藏3 小时前
Python接口自动化测试之Token详解及应用
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
hy____1233 小时前
字符串函数和结构题内存对齐
c语言·算法