zoukankan      html  css  js  c++  java
  • LeetCode刷题记录2020-10-05之Double Pointer!!!

    题目一:

    454. 四数相加 II

    class Solution:
        def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
            # 字典两两进行微处理
            count = 0
            d = {}
            for i in range(len(A)):
                for j in range(len(B)):
                    tmp = A[i] + B[j]
                    if d.get(tmp) is not None:
                        d[tmp] += 1
                    else:
                        d[tmp] = 1
            for i in range(len(C)):
                for j in range(len(D)):
                    tmp = C[i] + D[j]
                    if d.get(-tmp) is not None:
                        count += d[-tmp]
            return count

    题目二:

    1. 两数之和

    def twoSum(self, nums: List[int], target: int) -> List[int]:
            d = {}
            res = []
            for i in range(len(nums)):
                # 不能是d.get(nums[i]), 当下标为0时,是个坑
                # 用d.get(nums[i]) is not None来判断
                if d.get(nums[i]) is not None:
                    res = [d[nums[i]], i]
                    break
                else:
                    d[target - nums[i]] = i
            return res

    题目三:

    15. 三数之和

    def threeSum(self, nums: List[int]) -> List[List[int]]:
            res = []
            lenth = len(nums)
            nums.sort()
            for p in range(len(nums) - 2):
                # 1.满足什么条件直接跳出循环(p < i < j)
                if nums[p] > 0: break
    
                # 2.满足什么条件跳过当前循环(去重)
                if p > 0 and nums[p] == nums[p-1]: continue
    
                # 3.双指针(double pointer)
                i = p + 1
                j = lenth - 1
                while i < j:
                    num = nums[p] + nums[i] + nums[j]
                    if num < 0:
                        i += 1
                    elif num > 0:
                        j -= 1
                    else:
                        res.append([nums[p], nums[i], nums[j]])
                        i += 1
                        j -= 1
                        while i < j and nums[i] == nums[i-1]:
                            i += 1
                        while i < j and nums[j] == nums[j+1]:
                            j -= 1
            return res

    题目四:

    18. 四数之和

    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
            # 0. nums排序
            # 1. 提前结束break: 根据题意来
            # 2. 去重continue: nums[p] == nums[p-1]
            # 3. 双指针遍历:double pointer
    
            lenth = len(nums)
            res = []
            nums.sort()
    
            # k, p, i, j
            for k in range(len(nums) - 3):
                # 1
                if nums[k] + 3 * nums[k+1] > target: break
                # 2
                if (k > 0 and nums[k] == nums[k-1]) or nums[k] + 3 * nums[-1] < target: continue
                # 3 -> 1
                for p in range(k+1, len(nums) - 2):
                    # 1
                    if nums[k] + nums[p] + 2*nums[p+1] > target: break
                    # 2
                    if (p > k+1 and nums[p] == nums[p-1]) or nums[k] + nums[p] + 2 * nums[-1] < target: continue
                    # 3
                    i = p+1
                    j = lenth - 1
                    while i < j:
                        num = nums[k] + nums[p] + nums[i] + nums[j]
                        if num < target:
                            i += 1
                        elif num > target:
                            j -= 1
                        else:
                            res.append([nums[k],nums[p], nums[i], nums[j]])
                            i += 1
                            j -= 1
                            while i < j and nums[i] == nums[i - 1]: i += 1
                            while i < j and nums[j] == nums[j + 1]: j -= 1
            return res
  • 相关阅读:
    对于ajax传递中文乱码问题,研究js encodeURI 与request.HtmlEncode的区别
    对于sa无法登陆,如何用windows身份验证来修改密码
    ASP.Net中自定义Http处理及应用之HttpHandler篇 1
    ReportViewer报表控件解析与使用(原)
    HttpUtility.UrlEncode,Server.UrlEncode 的区别
    xsl xml 以及 树的编写(原创)
    【转】存储过程的优缺点
    【转】关闭模态子窗口后刷新父窗口
    【转】ASP.NET 文件下载
    【转】去除HTML标签的方法
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/13771520.html
Copyright © 2011-2022 走看看