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. [kuangbin]专题九 连通图 题解+总结

    kuangbin专题链接:https://vjudge.net/article/752 kuangbin专题十二 基础DP1 题解+总结:https://www.cnblogs.com/RioTian ...

  2. 使用 Serverless Devs 插件快速部署前端应用

    作者| 邓超 Serverless Devs 开源贡献者 背景 我们在 上文 [Aliyun] [FC] 如何使用 @serverless-devs/s 部署静态网站到函数计算 中,详细的介绍了如何通 ...

  3. <vue 基础知识 2、插值语法> v-once,v-html,v-text,v-pre,v-cloak

    代码结构 一.     Mustache 1.效果 展示如何将数据展示在页面上 2.代码 01-Mustache.html <!DOCTYPE html> <html lang=&q ...

  4. 7 Englishi 词根

    1.跟直播,跟复习课,完成作业 2. 基础差加餐,听录播 3.如何听课 4.单词学习反复多次 如何记笔记 语块的汉语意思 单词的记忆方式和固定表达 俩种方式记忆单词 语块关联记忆 基础词根词缀(6节课 ...

  5. vue-element-admin完整开源项目介绍、本地部署和初步探索

    1 说明: 1.1 从一个广受好评的开源项目:vue-element-admin的本地化,来初步分析vue的相关知识. 2 github地址和下载本地部署: https://github.com/Pa ...

  6. 小白学标准库之 http

    1. 前言 标准库是工具,是手段,是拿来用的.一味的学标准库就忽视了语言的内核,关键.语言层面的特性,内存管理,垃圾回收.数据结构,设计模式.这些是程序的内核,要熟练,乃至精通它们,而不是精通标准库. ...

  7. Nacos源码 (7) Nacos与Spring

    SpringCloud工程可以使用Nacos作为注册中心和配置中心,配置和使用非常简单,本文将简单介绍使用方式,并分析其实现方式. SpringCloud工程集成Nacos SpringCloud工程 ...

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

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

  9. VMware虚拟机部署Linux Ubuntu系统的方法

      本文介绍基于VMware Workstation Pro虚拟机软件,配置Linux Ubuntu操作系统环境的方法.   首先,我们需要进行VMware Workstation Pro虚拟机软件的 ...

  10. idb单副本时-TiKV节点损坏后有损数据恢复的方法

    Tidb单副本时-TiKV节点损坏后有损数据恢复的方法 背景 UAT环境下,为了减少存储. 搭建了一套单副本的TiDB集群 但是随着数据量的增多, UAT上面的数据可以丢失,但是表结构等信息是无法接受 ...