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. U64949 棋盘覆盖(二分图)| 二分图匹配总结

    https://ac.nowcoder.com/acm/contest/1062/B [题目] 给出一张n×n(n≤100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩盖 ...

  2. Problem A - Sequence with Digits (数学推导)

    题意: 已知 \(a_1\) 求 \(a_k\) ,推导公式见题面. #include<bits/stdc++.h> using namespace std; typedef long l ...

  3. 阿里云张建锋:核心云产品全面 Serverless 化

    11月3日,2022 杭州 · 云栖大会上,阿里云智能总裁张建锋表示,以云为核心的新型计算体系正在形成,软件研发范式正在发生新的变革,Serverless 是其中最重要的趋势之一,阿里云将坚定推进核心 ...

  4. 7、SpringBoot-mybatis-plus引入

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  5. linux下jdk1.7、1.8版本的安装

    -----1.7------        (1)解压安装包         tar -zxvf jdk-7u80-linux-x64.tar.gz    (2)移动到安装目录             ...

  6. 线段树 hdu 4027

    ***又是超时的问题,当一个区间全是1时,再去开方和不开方是一样的,所以在这一步不需要再往底层递归了*** #include <iostream> #include <cstdio& ...

  7. solr-es

    一.lucene 1.是什么 是apache提供的一套java写的用于全文检索工具包,该工具包提供了用于实现全文检索的api类,可用于实现搜索引擎功能. 2.搜索常用方法 顺序扫描法:应用于数据结构固 ...

  8. Qt5.9 UI设计(三)——添加UI、类及资源文件

    前言 设计一个软件,最简单的方式就是把控件直接往UI上放,然后再把功能实现了.这样可以实现基本的功能,但是界面不能缩放,如果拖动软件改变界面的大小,界面上的控件就会乱成一团,或者是界面的控件压根就不会 ...

  9. [转帖]Oracle 性能优化 之 游标及 SQL

    https://www.cnblogs.com/augus007/articles/9273236.html 一.游标 我们要先说一下游标这个概念. 从 Oracle 数据库管理员的角度上说,游标是对 ...

  10. [转帖]如何利用wrarp测试oss性能?

    https://zhuanlan.zhihu.com/p/529735003   前言 我们利用mino与ceph rgw搭建好的oss经过多层网络转发,传输速度必定有所折损,这个时候我们使用wrap ...