15:三个数之和

链接:15. 三数之和 - 力扣(LeetCode)

em...双冲for循环,从头去遍历,0-(a+b)是否在列表中,最终timeout

数组从小到大排序,设置三个指针,i从头遍历到lens-1,j从i+1开始,k从lens-1开始,sums==0,放入结果,大于0,k-1,小于0,j+1

如果i和i+1比较,相同跳过的话,会丢结果,i和i-1相等跳过,因为i-1已经在上一轮循环中检查过了,所以可以跳

jk就和他们下一个比较,相同跳过

i < j < k

如果nums[0]大于0,或者nums长度小于3,不存在这样的三元组

 1 class Solution:
2 def threeSum(self, nums: List[int]) -> List[List[int]]:
3 if(not nums): return nums
4 if(len(nums)<3): return []
5 nums.sort()
6 if(nums[0]>0): return []
7 lens=len(nums)
8 re=[]
9 for i in range(lens-1):
10 if(i>0 and nums[i]==nums[i-1]): continue
11 j=i+1
12 k=lens-1
13 while j<k:
14 sums=nums[i]+nums[j]+nums[k]
15 if(sums>0): k-=1
16 elif(sums<0): j+=1
17 else:
18 re.append([nums[i],nums[j],nums[k]])
19 while j<k and nums[j]==nums[j+1]: j+=1
20 while j<k and nums[k]==nums[k-1]: k-=1
21 j+=1
22 k-=1
23 return re

threeSum

18:四个数之和

链接:18. 四数之和 - 力扣(LeetCode)

和15一样,多加一层for

 1 class Solution:
2 def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
3 if(len(nums)<4): return []
4 nums.sort()
5 lens=len(nums)
6 re=[]
7 for i in range(lens-3):
8 if(i>0 and nums[i]==nums[i-1]): continue
9 for k in range(lens-1,i,-1):
10 if(k<lens-1 and nums[k]==nums[k+1]): continue
11 j=i+1
12 z=k-1
13 while(j<z):
14 sums=nums[i]+nums[j]+nums[z]+nums[k]
15 if(sums>target): z-=1
16 elif(sums<target): j+=1
17 else:
18 re.append([nums[i],nums[j],nums[k],nums[z]])
19 while j<z and nums[j]==nums[j+1]: j+=1
20 while j<z and nums[z]==nums[z-1]: z-=1
21 j+=1
22 z-=1
23 return re
24
25

fourSum

1:两个数之和

链接:1. 两数之和 - 力扣(LeetCode)

哈希就行,target-nums[i] in nums[i+1:]即可return

 1 class Solution:
2 def twoSum(self, nums: List[int], target: int) -> List[int]:
3 if(len(nums)<2): return []
4 for i in range(len(nums)-1):
5 num=target-nums[i]
6 if(num in nums[i+1:]):
7 index=nums[i+1:].index(num)+i+1
8 return ([i,index])
9 return []
10

twoSum

**********************************************************************************************************************************************************************

双指针暂时告一段落,开启二分法之旅

540:有序数组中的单一元素

链接:540. 有序数组中的单一元素 - 力扣(LeetCode)

找到中间元素,和左右对比,相等,检查左右元素个数,哪边为基数,往哪边找,都不等,就是它;没找到,跳出来了,左=右,这个就是

 1 class Solution:
2 def singleNonDuplicate(self, nums: List[int]) -> int:
3 if(not nums): return 0
4 left,right=0,len(nums)-1
5 while left<right:
6 middle=left+(right-left)//2
7 print(left,right,middle)
8 if(nums[middle]==nums[middle-1]):
9 if((middle-left)%2==0): right=middle-2
10 else: left=middle+1
11 elif(nums[middle]==nums[middle+1]):
12 if((middle-left)%2==0): left=middle+2
13 else: right=middle-1
14 else:
15 return nums[middle]
16 print(left,right)
17 return nums[left]

singleNonDuplicate

4:寻找两个数组的中位数

链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode)

合并,排序,找中间

1 class Solution:
2 def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
3 if(not nums1 and not nums2): return 0
4 nums=nums1+nums2
5 nums.sort()
6 middle=len(nums)//2
7 if(middle==0): return nums[0]
8 if(len(nums)%2): return nums[middle]
9 else: return (nums[middle]+nums[middle-1])/2

findMedianSortedArrays

Leetcode刷题第四天-双指针-二分法的更多相关文章

  1. C#LeetCode刷题-双指针

    双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.5% 中等 11 盛最多水的容器   43.5% 中等 15 三数之和   16.1% 中等 16 最接近的三数之和   3 ...

  2. LeetCode刷题模板(1):《我要打10个》之二分法

    Author       :  叨陪鲤 Email         : vip_13031075266@163.com Date          : 2021.01.23 Copyright : 未 ...

  3. LeetCode刷题总结之双指针法

    Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...

  4. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  5. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...

  6. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  7. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

  8. LeetCode刷题总结-树篇(中)

    本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...

  9. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  10. LeetCode刷题预备知识(二)

    Python四大数据结构的属性及方法 在LeetCode刷题预备知识一中我们掌握了常见的内置函数,和四大数据结构的基本概念: 但只掌握这些还远远不够,我们还需了解四大数据结构的属性及方法才能更高效快速 ...

随机推荐

  1. java进阶(17)--Random

    一.Random随机数 java.unil.Random类 Random randomnum = new Random(); int num = randomnum.nextInt();   二.举例 ...

  2. 第65篇 AJAX初识 校验用户名 登录示例 文件上传 csrftoken

    1, 知识储备 2. AJAX的定义 异步的JavaScript和XML 使用场景: JavaScript和后端的数据传递 2.1原生的JavaScript实现AJAX 2.2 JQuery实现 2. ...

  3. mybatis plus 获取新增实体的主键

    转载请注明出处: mybatis plus 新增实体对象调用的是 IService 接口中的 save 方法: default boolean save(T entity) { return SqlH ...

  4. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.1)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  5. [转帖]AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)

    AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1) 适用于: Oracle Database Cloud Schema Service - 版本 N/A ...

  6. [转帖]Kafka Dashboard

    https://grafana.com/grafana/dashboards/18276-kafka-dashboard/ Kafka resource usage and consumer lag ...

  7. [转帖]Nginx惊群效应引起的系统高负载

    https://zhuanlan.zhihu.com/p/401910162 原创:蒋院波 导语:本文从进程状态,进程启动方式,网络io多路复用纬度等方面知识,分享解决系统高负载低利用率的案例 前言: ...

  8. [转帖]MegaRaidCli64 常用命令解释

    MegaRaidCli64 常用命令解释 安装 查看 创建 删除 案例 安装 Centos wget https://docs.broadcom.com/docs-and-downloads/raid ...

  9. [转帖]linux,wget 的证书不可信,证书使用不安全的算法签名

    centos wget 的证书不可信,证书使用不安全的算法签名 wget wget https://www.php.net/distributions/php-7.4.28.tar.gz 出现错误: ...

  10. [转帖]华为毕昇 JDK 8u292、11.0.11 发布!

    https://baijiahao.baidu.com/s?id=1705499834793298544&wfr=spider&for=pc 2021 年 6 月 30 日,毕昇 JD ...