Leetcode刷题第四天-双指针-二分法
15:三个数之和
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:四个数之和
和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:两个数之和
哈希就行,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刷题第四天-双指针-二分法的更多相关文章
- C#LeetCode刷题-双指针
双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.5% 中等 11 盛最多水的容器 43.5% 中等 15 三数之和 16.1% 中等 16 最接近的三数之和 3 ...
- LeetCode刷题模板(1):《我要打10个》之二分法
Author : 叨陪鲤 Email : vip_13031075266@163.com Date : 2021.01.23 Copyright : 未 ...
- LeetCode刷题总结之双指针法
Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
- LeetCode刷题总结-树篇(中)
本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- LeetCode刷题预备知识(二)
Python四大数据结构的属性及方法 在LeetCode刷题预备知识一中我们掌握了常见的内置函数,和四大数据结构的基本概念: 但只掌握这些还远远不够,我们还需了解四大数据结构的属性及方法才能更高效快速 ...
随机推荐
- L3-020 至多删三个字符 (30分) (DP)
问题描述: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1e6] ...
- Windows环境下,解决无法使用ping命令
众所周知,ping命令是个非常实用的网络命令:有时,我们会发现在电脑中无法使用ping命令,一般来说,是由于电脑的环境变量出了问题,本文将介绍如何解决这个问题. 1.一般出现ping命令无法使用的情况 ...
- C++函数:std::tie 详解
在补CF周赛时发现dalao用了一个 tie函数和tuple类型,表示没怎么接触,现在稍微学习记录一下. tuple 即元组,可以理解为pair的扩展,可以用来将不同类型的元素存放在一起,常用于函数的 ...
- 2 Englishi 词根
11 mis 错 misuse misfortune misunderstand 12 out 超过: 外 outnumber outspend outdoor 13 over 过度 overprai ...
- python之HtmlTestRunner(一)生成测试报告
一.下载安装 windows10,cmd环境通过如下命令
- Angular系列教程之观察者模式和RxJS
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 【MicroPython】生成micropython版本头文件 - py\makeversionhdr.py
用法 $ python makeversionhdr.py mpversion.h 实现 带git仓 get_version_info_from_git 使用git指令: git describe ...
- 浏览器兼容 : IE 5 到 IE 9
<!--[if IE]> <link href="ie.css" rel="stylesheet"> <![endif]--> ...
- [转帖]如何修改Bash Shell的提示符的格式和配色
https://zhuanlan.zhihu.com/p/348416919 我们大多数使用的shell提示符,显示用户名.主机名和当前所在目录.在本文将会介绍如何定制一个自己喜欢的Bash. 了解B ...
- [转帖]Fluentd 的优缺点
https://zhuanlan.zhihu.com/p/129375187 以前在不少场合浅度使用过 Fluentd,将日志汇聚到一个地方.它给我的大体印象是 简单且能解决问题 直到最近遇到一个 ...