1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] ==
9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6 输出:[0,1]

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:d = {}for i,n in enumerate(nums):res = target - nif res in d:return[d[res],i]# d存每个数字的下标else:d[n] = i

15. 三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

作者:wu_yan_zu
链接:https://leetcode-cn.com/problems/3sum/solution/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

双指针解法是一层for循环num[i]为确定值,然后循环内有left和right下标作为双指针,找到nums[i] + nums[left] + nums[right] == 0。

示例 1:

输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]]
示例 2:

输入:nums = [] 输出:[]
示例 3:

输入:nums = [0] 输出:[]

class Solution:def threeSum(self, nums):ans = []n = len(nums)nums.sort()for i in range(n):left = i + 1right = n - 1# 以为已经排序过了 如果某元素大于0 则之后的和不可能为0if nums[i] > 0:break'''错误的去重 nums[i] == nums[i+1] 会漏掉 -1 -1 2这种'''# 去重 去掉重复的数字 比如 -4 -1 -1 -1  2 需要去掉重复的第一个数字的-1# 因为nums[i]是第一个数 之后的i不能与之前的i-1数相同 否则会重复计算相同的数组if i >= 1 and nums[i] == nums[i - 1]:continuewhile left < right:total = nums[i] + nums[left] + nums[right]# 说明右边的数大了if total > 0:right -= 1# 说明左边的数大了elif total < 0:left += 1else:ans.append([nums[i], nums[left], nums[right]])# 去重逻辑 应该放在找到一个三元组之后 去重是去 与中间数或最后一个数重复的数while (left < right and nums[right] == nums[right - 1]): right -= 1while (left < right and nums[left] == nums[left + 1]): left += 1# 找到答案后 双指针同时收缩right -= 1left += 1return ans

454. 四数相加 II

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

示例 1:

输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2] 输出:2
解释: 两个元组如下:

  1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
  2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0
    示例 2:

输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0] 输出:1

class Solution(object):def fourSumCount(self, nums1, nums2, nums3, nums4):""":type nums1: List[int]:type nums2: List[int]:type nums3: List[int]:type nums4: List[int]:rtype: int"""res = {}for n1 in nums1:for n2 in nums2:key = n1+n2if key not in res:res[key]=1else:res[key]+=1# 如果res中存在 -(n3+n4)=n1+n2count = 0for n3 in nums3:for n4 in nums4:key = -n3-n4if key in res:count+=res[key] return count

18. 四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2:

输入:nums = [2,2,2,2,2], target = 8 输出:[[2,2,2,2]]

思路:
四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是O(n2)O(n^2)O(n2),四数之和的时间复杂度是O(n3)O(n^3)O(n3) 。

class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""nums.sort()n =len(nums)# if n < 4:#     return []res = []for i in range(n):if i>0 and nums[i] == nums[i-1]:continuefor j in range(i+1,n):if j>i+1 and nums[j] == nums[j-1]:continueleft = j+1right = n-1while left<right:total=nums[i]+nums[j]+nums[left]+nums[right]if total >target:right -=1elif total <target:left += 1else:res.append([nums[i],nums[j],nums[left],nums[right]])while left < right and nums[right] == nums[right-1]:right -= 1while left < right and nums[left] == nums[left+1]:left += 1left += 1right -= 1return res

哈希表-map(对于python来说是字典)相关推荐

  1. 哈希表的介绍_以Python为例

    数据结构篇--哈希表(以Python为例) 一.哈希表介绍 ​散列表(英译)(Hash table, 也称哈希表(音译)),是根据关键码值(Key Value)而直接进行访问的数据结构.也就是说,它通 ...

  2. 算法--猜字谜(哈希表优化)

    算法–猜字谜(哈希表优化) 元宵节的时候,力扣上的每日一题是这样的: 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 wo ...

  3. 【必须学好】字典、哈希与Map

    转载:https://blog.csdn.net/cownew/article/details/6478993 HashMap.Map等是很多公司面试.笔试的时候常考的题目,也是实际开发中经常用到的数 ...

  4. 沙师弟学数据结构与算法之哈希表

    哈希表 在学习Python的时候有时候会想,为什么dict和set的查找速度这么快,感觉就像是事先知道要找的元素的位置一样?在学完哈希表之后,这个问题也就够被很好的解释了. 定义 哈希表是一种根据关键 ...

  5. 算法动画图解:两数之和(哈希表)

    更多算法动画图解,长按此链接跳转AppStore 动画 算法动画图解:两数之和(哈希表) 思路 哈希表map用来保存一个数,另一个数在遍历nums的时候和map中的数尝试求和是否为target,如果求 ...

  6. LeetCode 1. 两数之和【哈希表】

    1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  7. Redis哈希表总结

    本文及后续文章,Redis版本均是v3.2.8 在文章<Redis 数据结构之dict><Redis 数据结构之dict(2)>中,从代码层面做了简单理解.总感觉思路的不够条理 ...

  8. python 哈希表_哈希表哪家强?编程语言找你来帮忙!

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自编程技术宇宙 哈希表华山论剑 比特宇宙编程语言联合委员会准备举办一次大会,主题为哈希 ...

  9. python leetcode_七十五、Python | Leetcode哈希表系列

    @Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

最新文章

  1. 当支持向量机遇上神经网络......
  2. Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)
  3. SQL Tuning 基础概述10
  4. 解决Fedora 自己编译的内核不能运行Virtualbox的问题。
  5. mysql5.6的安装步骤_MySQL5.6安装步骤
  6. 判断Python输入是否为数字
  7. Android 系统(199)---Android事件分发机制详解
  8. 程序员除了转行做管理,还可以做什么?
  9. html在excel打开是乱码,excel打开xls格式乱码怎么办excel表格乱码的修复方法
  10. java线程同步机制,实现同步锁
  11. python用实现FGO自动挂机战斗思路
  12. 传奇服务器脚本文件在哪个文件夹,传奇服务端目录文件详细说明
  13. idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理
  14. Hi3519v101 uart驱动
  15. 目标检测算法DSSD的原理详解
  16. STM32CubeMX入门使用一
  17. C++のeasyx3:函数clearcliprgn、cleardevice、closegraph、getaspectratio、graphdefaults的运用
  18. Saleor:开源、免费的无头电子商务平台——系列教程,快速打造属于你的电商网站
  19. 神通数据库 mysql_sqlserver、mysql、oracle、神通数据库(oscar)、达梦(dm)各自的默认端口号...
  20. 总结些生活和工作的感悟,给可能需要的人

热门文章

  1. 【深入理解JVM】Java类文件的基本结构
  2. mongodb 入门笔记
  3. 【Python之os模块】使用
  4. PostgreSQL的高可用与数据复制方案
  5. 深入理解 Angular 变化检测(change detection)
  6. Oracle EBS R12.1.1 应用克隆 - 3
  7. 使用内置函数操作数据库
  8. nstruts2.0发布前奏---浅谈struts和依赖注入在项目中的应用
  9. lnmp的编译安装mysql_LNMP环境搭建(二) 编译安装MySQL
  10. gcc生成dll linux,gcc编译dll和调用dll