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刷题预备知识一中我们掌握了常见的内置函数,和四大数据结构的基本概念: 但只掌握这些还远远不够,我们还需了解四大数据结构的属性及方法才能更高效快速 ...
随机推荐
- 理解CAP理论
1. 理论什么是CAP? cap定理,它的提出是对于一个分布式系统得出的一个观点,是不能同时满足下面三点 一致性 可用性 分区容忍性 CAP理论认为,分布式系统最多只能同时满足其中的两个特性,而无法同 ...
- mysql 字段逗号分割行转列操作
一.需求 某字段的值为 7654,7698,7782,7788 期望的效果: 二.实现语句 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,778 ...
- <vue 基础知识 6、条件判断标签v-if>
代码结构 一. 01-v-if用法 1.效果 根据分数的不同展现不同的汉字 2.代码 01-v-if用法.html <!DOCTYPE html> <html lang=&q ...
- div模拟表格单元格合并
效果如下图: html代码如下: 1 <ul class="schedule-list"> 2 <li class="schedule-title&qu ...
- zzuli 1902: 985的因子对难题
***这道题明显是在卡时间,类比快速打素数表的算法,*** #include<iostream> #include<cstdio> #include<cstring> ...
- 08_N叉树的层序遍历
N叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历.(即从左到右,逐层遍历). 树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例). 示例 1: 输入:root = [ ...
- 机器学习-线性分类-支持向量机SVM-软间隔-核函数-13
目录 1. 总结 SVM 2. 软间隔svm 4. 核函数 1. 总结 SVM SVM算法的基础是感知器模型, 感知器模型 与 逻辑回归的不同之处? 逻辑回归 sigmoid(θx) 映射到 0-1之 ...
- 每天学五分钟 Liunx 0000 | 存储篇:GlusterFS
GlusterFS GlusterFS,是一个分布式文件系统,它通过 TCP/IP 或 IB(InfiniBand RDMA)网络将多个存储资源整合在一起,提供存储服务,具有很强的可扩展能力. G ...
- RLHF · PbRL | QPA:选择 near on-policy query,加速 policy learning 收敛速度
论文题目:Query-Policy Misalignment in Preference-Based Reinforcement Learning,ICLR 2023 Spotlight(8 6 6) ...
- CLion创建自定义代码模板
1.问题 很多时候我们都想要简化代码编写,比如像IDEA那样,写入一个sout即会补全为System.out.println( |inserts cursor here| );的形式 最急切的例子便是 ...