自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 347. 前 K 个高频元素 大根堆

题意:返回的是高频元素的值 nums = [1,1,1,2,2,3], k = 2输出[1,2],1,2这两个元素频率最高前k个大的小的,第k个大的小的 ,都用大根堆小根堆来做。相对于排序,时间复杂度更低利用heapq小根堆的包import heapqclass Solution: def topKFrequent(self,nums,k): heap_max=[]...

2020-03-31 23:03:23 134

原创 454四数相加II 两数相加进化版

题意:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0两数相加的进化版,两个两数相加,结果互为相反数class Solution: def fourSumCount(self,A,B,C,D): lookup=collections.defaultdi...

2020-03-31 21:26:10 106

原创 652寻找重复的子树 DFS,有时间再看这道题

做这道题进一步感觉到DFS的乐趣,希望能掌握该算法。题意:import collectionsclass Solution: def findDuplicateSubtrees(self,root): count=collections.Counter() result=[] def collect(node): ...

2020-03-30 21:02:57 119

原创 49字母异位词分组 哈希表

from collections import defautdictdefaultdict(int) 如果key不存在,value为0;defaultdict(set) value为set();defaultdict(string) value为空字符串;defaultdict(list)value为[]setdefault也可以,result={}result.setdefault(ke...

2020-03-29 11:13:18 128

原创 599. 两个列表的最小索引总和 哈希映射方法

给定两个列表,返回共同值,且这个共同值在两个列表中索引和最小(就是共同值可能有很多个,返回索引下标和最小的,当然索引下标和最小的也可能有多个,也都返回)class Solution: def findRestaurant(self,list1,list2): dicts={} min_index=2000 result=[] ...

2020-03-28 19:25:16 111

原创 205. 同构字符串

判断两个字符串是否为同构字符串,思路很简单,就是两个字符串的每个元素首次出现的位置是否一样。输入: s = “egg”, t = “add” True 输入: s = “foo”, t = “bar” False 输入: s = “paper”, t = “title” True不需要构建索引的关系,直接对两个string进行哈希,key-value,若同样的元素映射过去还是同样的元素,则说...

2020-03-28 17:31:40 72

原创 202. 快乐数

快乐数的定义是,给定一个整数,算每一位的平方和,对平方和新生成的数继续算每一位的平方和,最后得到的数如果是1 就是快乐数,也可能无限循环不是1(但其实从数学上可以证明不会无限循环)数学证明:对于一个int整数,最大值为‭‭2 147 483 647‬‬,在这个范围内每一个数的平方和最大的数为1 999 999 999,而这个数的平方和为1+9^2 *9=730,所以循环是有限循环。class...

2020-03-28 16:25:02 103

原创 705设计哈希集合 706设计哈希映射

第一次近距离接触哈希,一点点啃这个知识点。705 设计哈希集合,采用链表的结构参考链接class MyHashSet: def __init__(self): self.keyRange=769 #预定义769个桶 self.bucketArray=[Bucket() for i in range(self.keyRange)] def _ha...

2020-03-28 15:26:22 134

原创 61旋转链表

题意:给定一个链表,一个整数k,旋转链表,将链表中每个节点向右移动k个位置输入:12345null 输出 45123null k=2#Definition for singly-linked list#class ListNode:# def __init__(self,x):# self.val=x# self.next=Noneclass S...

2020-03-27 09:11:36 84

原创 138. 复制带随机指针的链表 回溯 结合133克隆图一起看

题意:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。深拷贝用回溯方法回溯回溯算法的第一想法是将链表想象成一张图。链表中每个节点都有2个指针(图中的边)。因为随机指针给图结构添加了随机性,所以我们可能会访问相同的节点多次,这样就形成了环。此方法中,我们只需要遍历整个图并拷贝它。拷贝的意思是每当遇到一个新的未访问过的节点,你...

2020-03-26 09:49:51 98

原创 430. 扁平化多级双向链表 (链表伪指针复习,DFS二叉树前序遍历复习)

扁平化的多级双链表,题意参考双向链表,除了prev和next,它还有一个子指针,可能指向单独的双向链表'''#Definition for a Nodeclass Node(object): def __init__(self,val,prev,next,child): self.val=val self.prev=prev self...

2020-03-25 22:53:25 84

原创 2. 两数相加

关于链表的指针题,应该好好琢磨看看这道给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8class Solution: def addTwoNumbers(self,l1,l2...

2020-03-24 23:00:19 56

原创 234回文链表,再次用到了反转链表

题意:判断一个链表是否是回文链表,类似于判断回文数组。两种思路,一是将链表遍历放入数组,然后比较数组从前往后和从后往前是否一样,空间复杂度O(n),第二种方法是反转链表法,比较有意义,空间复杂度O(1)class Solution: def isPalindrome(self,head): if head is None: return True...

2020-03-24 09:11:26 126

原创 328奇偶链表

题意:给定一个单链表,将链表的奇数位和偶数位的节点分开,形成一个前部分都是奇数位上的,后一部分都是偶数位上的链表。这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 要求在原地实现,即空间复杂度O(1)# Definition for singly-linked list.# class ListNode:# def __init__(self, x):#...

2020-03-23 22:36:52 68

原创 203. 移除链表元素

删除链表中与val值相等的节点,使用哨兵节点;哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等,它们是纯功能的,通常不保存任何数据,其主要目的是使链表标准化,如使链表永不为空、永不无头、简化插入和删除。属于简单题class Solution: def removeElements(self,head,val): sentinel = ListNode(0) ...

2020-03-23 09:35:33 59

原创 206. 反转链表

反转一个链表,输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL;使用两种方法来解决,递归和迭代方法一 递归归的条件:head.nextNone,说明到尾部了headNone,是为了处理特殊情况,输入空列表,直接返回。递的操作:1.得到尾部节点:p=self.reverseList(h...

2020-03-22 18:30:52 69

原创 160相交链表

题意:找到两个单链表的相交点class Solution: def getIntersectionNode(self,headA,headB): a, b = headA, headB while a != b: #考虑不相交的两个链表会不会无线循环? #不会滴,因为有几步a=None,b也会None,如果两个不相交的链表长度相等...

2020-03-22 16:04:18 66

原创 142. 环形链表 II

141环形链表的进阶版,环形链表是返回布尔值,判断是否为环形链表(做过),方法有两种,有空间复杂度的哈希表,没有空间复杂度的快慢指针。本进阶题是返回环形链表的链表尾连接到链表中的位置class Solution(object): def detectCycle(self, head): if not (head and head.next): r...

2020-03-22 09:48:23 106

原创 707. 设计链表

学习使用设计单链表和双链表。设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值...

2020-03-21 10:13:01 56

原创 841. 钥匙和房间

给定一个rooms房间列表,rooms[i]代表第i个房间,每个房间里有几把钥匙,可以打开对应的rooms[j]等房间。初始0号房间开启,其余房间均关闭,问遍历完能否打开所有的房间。使用dfs深度优先搜索。class Solution: def canVisitAllRooms(self,rooms): visited={0} #只有0号房间可以打开,所以初始化只有0号...

2020-03-20 11:18:20 118

原创 542. 01 矩阵

0-1矩阵,就是给定一个01矩阵,得到另一个矩阵,该矩阵表示每个元素距离最近0的距离。0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 1 0 0 1 0 0 1 00 0 0 输出 0 0 0 1 1 ...

2020-03-19 23:30:47 66

原创 733. 图像渲染

初始位置(sr,sc)=color,遍历整个image,将和初始位置的color相等的点都变成new_color,称为渲染。和岛屿数量那道题很像,借鉴来写。方法一 DFSclass Solution(object): directions=[(-1,0),(0,-1),(1,0),(0,1)] def floodFill(self,image,sr,sc,newColor):...

2020-03-19 21:49:11 58

原创 394. 字符串解码

s = “3[a]2[bc]”, 返回 “aaabcbc”.s = “3[a2[c]]”, 返回 “accaccacc”.s = “2[abc]3[cd]ef”, 返回 “abcabccdcdcdef”.本题难点在于括号内嵌套括号,需要从内向外生成与拼接字符串,这与栈的先入后出特性对应。构建辅助栈 stack, 遍历字符串 s 中每个字符 c。时间复杂度O(n)空间复杂度O(n)cla...

2020-03-19 17:29:23 159

原创 232. 用栈实现队列+225. 用队列实现栈

用栈实现队列队列是先进先出,实现队列的最直观的方法是用链表。但本题是要求使用栈。本题两个stack相互倒,负负得正class MyQueue: def __init__(self): self.instack=[] self.outstack=[] def push(self,x): self.instack.append(x)...

2020-03-18 23:13:00 61

原创 94. 二叉树的中序遍历,递归,基于栈的遍历,莫里斯遍历+前序遍历和后序遍历

二叉树的四大遍历之一中序遍历。使用三大方法,递归,基于栈的遍历,莫里斯遍历方法一:递归方法效率低,栈迭代方法虽提高了效率,但嵌套循环太麻烦。本方法递归+栈迭代核心思想:新节点为白色,已访问的节点为灰色。遇到白色节点,标为灰色,其右根左一次入栈,遇到灰节点输出class Solution: def inorderTraversal(self,root): WHITE,G...

2020-03-17 23:42:37 237 1

原创 133克隆图

题意:对原图进行克隆,输入为每一个节点的邻居列表值,输出为同样的克隆值。如:adjList = [[2,4],[1,3],[2,4],[1,3]]输出[[2,4],[1,3],[2,4],[1,3]]表示第1个节点的邻居是2和4,第2个节点的邻居是1和3等其实考察的就是图的遍历。当然,就两种方法,DFS和BFS方法一 DFSclass Solution: def cloneGraph(s...

2020-03-15 18:53:14 59

原创 150. 逆波兰表达式求值

题意:根据逆波兰表示法,求表达式的值。 [“2”, “1”, “+”, “3”, “"]((2 + 1) * 3) = 9;[“4”, “13”, “5”, “/”, “+”](4 + (13 / 5)) = 6; [“10”, “6”, “9”, “3”, “+”, “-11”, "”, “/”, “*”, “17”, “+”, “5”, “+”]((10 * (6 / ((9 + 3) * -...

2020-03-14 23:28:56 83

原创 496. 下一个更大元素 I 503. 下一个更大元素 II

题意:给定两个数组nums1,nums2,1是2的子数组。对于1中的每一个数,找到在2数组中,下一个比该元素大的数,返回数组,不存在则对应位置输出-1. 该题与Ⅱ的区别在于不是循环数组。单调栈class Solution: def nextGreatElement(self,nums1,nums2): result=[] #初始化结果数组,栈,哈希表 s...

2020-03-13 23:25:35 67

原创 739每日温度

题意:给定一个温度列表,对于每一个元素,找出其后第几个首次大于该元素。记录为该元素的输出列表值。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。栈用栈来记录索引indexclass Soulution: def dailyTemperatures(self,...

2020-03-13 21:18:40 82

原创 20有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空;“{[]}” "()[]{}"返回true。使用栈,后进先出,内部消化。...

2020-03-13 17:34:13 88

原创 155实现最小栈

题意:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。 getMin() – 检索栈中的最小元素。...

2020-03-13 13:06:32 102

原创 279.完全平方数

题意:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。需要让组成和的完全平方数的个数最少。由正整数n开始,找最少的个数,首先想到的就是BFS方法,顺序遍历每一层,最近的不行再看下个较近的方法一 BFSfrom collections import dequeclass Solution: def numSquares(self,n): ...

2020-03-12 22:52:24 70

原创 752. 打开转盘锁

方法一 BFS广度优先搜索因为是找到最少的解锁步数,这实际上可以认为是在图上搜索最短路径。BFS 总是优先搜索距离根节点近的节点,因此它搜索到的路径就是最短路径。from collections import dequeclass Solution: def openLock(self,deadends,target): def neighbors(node):#定义每一个node的8...

2020-03-11 23:45:23 71

原创 200岛屿数量(DFS,BFS,并查集)需要再次复习★

题意:找岛的数量,如输入是11110 1100011010 1100011000 0010000000岛的数量是1个00011岛的数量是3个本题可以通过DFS,BFS,并查集三种方法来做,已掌握DFS,重点学习并查集。...

2020-03-06 22:57:12 166

原创 622设计循环队列

顺序队列实现先进先出的原则。front指向队首元素,rear指向队尾元素的下一个存储位置。关于顺序队列,会产生假溢出的情形,例如一个有6个存储空间的队列存满,出队2次以后,仍无法在第7个存储空间继续入队,但实际上此队列在前方仍然有两个空余的存储空间。解决这个问题,最好的方法是将顺序队列–》逻辑上首位相连的循环队列,转换可以用front=(rear+1)%size实现。但是循环队列有一个问题,就...

2020-03-06 15:47:39 145

原创 198打家劫舍(动态规划题目)

题意:如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。例如: [1,2,3,1],偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。最高金额 = 1 + 3 = 4 。方法一:动态规划法先找状态方程,由于相邻的房屋不能一同被偷,所以第n号房屋偷了,n-1房屋不能...

2020-03-05 22:13:55 143

原创 121买卖股票的最佳时机(只能买卖一次)

题意:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。分析:求区间内的差值最大,结合53题最大子序和,构建一个前后差的数组,然后求数组区间内的最大和。即为最大利益。可以理解为题目要求最大价格差,我们可以构造一个数组,prices[i]-prices[i-1],...

2020-03-05 12:38:52 413

原创 53最大子序和(划重点,很多算法学习)

本题可以用,动态规划,分治法,贪心算法,Kadane算法四种方法来解决。废物如我,先掌握分治法和动态规划的解法,加油!题意:给定一个数组,找到其中的一个具有最大和的连续子数组,并返回其最大和。举例:[-2,1,-3,4,-1,2,1,-5,4], 连续子数组 [4,-1,2,1] 的和最大,为 6。方法一:分治法分治法就是将大数组切分成几个小组,每个小组再切分成几个更小的小组,直到不能继续...

2020-03-04 23:18:36 176

原创 278. 第一个错误的版本

题意:可以通过调用 bool isBadVersion(version) 接口来判断版本号version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。方法一:遍历最直接的方法是进行一次线性扫描,即对[1…n] 都调用一次 isBadVersion。时间复杂度为O(N),空间复杂度为O(1)方法二,二分查找在每次操作中减少一半的搜索空间,...

2020-03-03 17:36:03 49

原创 88合并两个有效数组

题意:将排序好的数组nums2合并到nums1中,使得nums1成为一个有序数组。假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。方法一:双指针方法,从后往前class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> No...

2020-03-03 13:48:29 102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除