leetcode
shower_v
慢慢进步的小菜鸟
展开
-
leetcode__求众数__python
解题思路:这道题总体来说还是比较简单,维持两个中间变量即可,根据出现的次数一定大于或者等于总次数的一半,那么我们可以得到代码如下:class Solution: def majorityElement(self, nums: List[int]) -> int: #keep a count #keep a key count = 0...原创 2019-07-13 15:44:34 · 116 阅读 · 0 评论 -
leetcode__13.罗马数字转整数__python
解题思路:题目的想法很简单,每次都对字符串的首部分的一个或者两个字符做个判断然后累加得到最终的结果即可。具体代码如下:class Solution: def romanToInt(self, s: str) -> int: roma_dict = {'M':1000, 'D':500, 'C':100, 'L':50, \ 'X':10,...原创 2019-06-30 11:23:36 · 97 阅读 · 0 评论 -
leetcode__单词拆分__python
解题思路:利用深度优先搜索可以解决这道题,但是简单的直接用深度优先搜索会导致时间超过限制;所以我们对每一个位置进行一次遍历即可,在每一个位置依次检测是否能到达即可。具体代码如下:class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: if s in wordDict: ...原创 2019-07-10 19:55:43 · 129 阅读 · 0 评论 -
leetcode__1.两数之和__python
解题思路:这个题目是一道简单题,应该是比较简单的,想到的解决办法有两种,具体已经写在代码中了,代码采取的是第二种解决办法。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: #1.如果是排序好的数组,则直接利用双指针法即可 #2.对于未排序好的策略...原创 2019-06-30 17:50:42 · 63 阅读 · 0 评论 -
leetcode__5.最长回文子串__python
题目解读:这是一道寻找最长回文子串的题,怎么去寻找最长回文子串是一个问题,直接暴力求解,遍历所有可能的首字母的位置以及尾字母的位置,但是时间复杂度为O(n^2)。因此我们就需要用一个时间复杂度上要好的算法,也就是manacher算法,俗称“马拉车算法”。马拉车算法到底是怎么回事呢?其实要理解马拉车算法不难,主要就是有效的利用到了对称的信息来解决问题,只需要做一次遍历就可以解决问题,时间复杂...原创 2019-07-01 11:10:38 · 115 阅读 · 2 评论 -
leetcode__单词拆分II__python
解题思路:这道题一眼看去,就死类似于单词拆分I的深度优先搜索就可以解决的题目,不过这里升级了,就是要把每一种切分结果都要返回。具体代码如下:class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> List[str]: mem = {} tmp = self.dfs(s...原创 2019-07-11 11:12:26 · 163 阅读 · 0 评论 -
leetcode__实现Trie__python
解题思路:利用链表的思路去解决问题,不过不同于正常的链表节点的指针部分,这里可能有0到26个节点。具体实现的代码如下:class Node: def __init__(self): self.next = {} self.tag = False class Trie: def __init__(self): ""...原创 2019-07-11 20:24:09 · 54 阅读 · 0 评论 -
leetcode__只出现过一次的数字__python
解题思路:利用异或位运算(^),遍历一次即可找到对应的只出现一次的那个数字,其余的出现两次的数字在异或运算中都直接变成了0;具体代码如下:class Solution: def singleNumber(self, nums: List[int]) -> int: res = 0 for num in nums: res ...原创 2019-07-07 14:52:33 · 109 阅读 · 0 评论 -
leetcode__求众数__python
解题思路:这道题目,我们可以维护一个key和一个count,key用来表示一个临时的字符,如果接下来的数字是这个数字,那么我们count+1,如果不是count-1,如果count=0的时候,接下里的数字还与key不相同,那么key为这个新的num,以这样的逻辑,一次遍历即可找到众数。具体代码如下:class Solution: def majorityElement(self, n...原创 2019-07-07 14:55:59 · 95 阅读 · 0 评论 -
leetcode__数组中的第K个最大元素__python
解题思路:1.如果是追求简洁代码,那直接sorted之后再取对应位置的值即可,这样做的时间复杂度是O(n*log(n))。class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: return sorted(nums)[len(nums) - k]2.如果追求时间复杂度,...原创 2019-07-14 13:06:47 · 239 阅读 · 0 评论 -
leetcode__最小栈__python
解题思路:栈的功能的实现,在实现的过程中维持一个最小值的变量即可。具体代码如下:class MinStack: def __init__(self): """ initialize your data structure here. """ self.data = [] self.min = '#' ...原创 2019-07-14 12:57:26 · 143 阅读 · 0 评论 -
leetcode__旋转数组__python
解题思路:这也是一道简单题,先处理玩旋转次数,然后再根据旋转次数给数组分段,然后分别赋值就好了;具体代码如下:class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place ins...原创 2019-07-13 15:52:38 · 128 阅读 · 0 评论 -
leetcode__存在重复元素__python
解题思路:遍历一次即可,遍历的过程中,利用字典保存一个状态,如果一个字符在之前出现过,则返回True,最后如果没找到的话,返回False。具体代码如下:class Solution: def containsDuplicate(self, nums: List[int]) -> bool: my_dict = {} for num in nums...原创 2019-07-13 16:59:27 · 216 阅读 · 0 评论 -
leetcode__移动零__python
解题思路:这道题可以用O(n)的时间复杂度来解决,只需要利用两个指针即可,第一个指针用来记录需要插入新的非零值的位置,第二个指针用来找到需要插入的值的位置即可,然后对第二个指针做一次遍历,遍历的过程中第一个指针累加即可。具体代码如下:class Solution: def moveZeroes(self, nums: List[int]) -> None: ""...原创 2019-07-13 17:14:34 · 72 阅读 · 0 评论 -
leetcode__打乱数组__python
解题思路:直接利用random的shuffle函数即可。具体代码如下:import randomclass Solution: def __init__(self, nums: List[int]): self.original = nums[:] self.data = nums def reset(self) -> List...原创 2019-07-14 11:08:43 · 85 阅读 · 0 评论 -
leetcode__两个数组的交集II__python
解题思路:统计每个单词出现的个数,然后再将其在两个列表中出现的最少的次数找出来,放入这么多个此数字到res中,最后输出结果即可,时间复杂度为O(n)。具体代码如下:class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: dict_one = {}...原创 2019-07-14 11:25:50 · 86 阅读 · 0 评论 -
leetcode__递增的三元子序列__python
解题思路:由于是要求的O(n)的时间复杂度,所以暴力解法一定是不可以的,但是如果利用好中间状态,就能解决好这道题。保存一个first作为我们现在认为比较小的数字,一个second作为我们任务比较小的第二个数字,当遇到一个比first更小的数字的时候我们不能立马就去将其代替first,所以我们需要将其保存下来,放到_first中以作备用,当遇到满足条件的下一个数字的时候,就可以用_first和对应...原创 2019-07-14 12:12:02 · 132 阅读 · 0 评论 -
leetcode__搜索二维矩阵II__python
解题思路:利用好排序信息,从右上角开始检查,做O(n+m)次判断即可找到是否含有对应的target。具体代码如下:class Solution: def searchMatrix(self, matrix, target): """ :type matrix: List[List[int]] :type target: int ...原创 2019-07-14 12:18:27 · 65 阅读 · 0 评论 -
leetcode__除自身以外数组的乘积__python
解题思路:先正向保存累乘结果,再反向保存累乘结果,再将对应的值乘起来能得到最终的结果,append到res中即可。具体代码如下:class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: forward = [] backward = [] ...原创 2019-07-14 12:36:01 · 121 阅读 · 0 评论 -
leetcode__搜索二维矩阵II__python
解题思路:利用好原始排序好的信息,从左上角的元素开始做判断,如果大于target,则说明该数字太大,需要变小点,所以向左移动一位;如果小于target,则说明该数字太小了,需要变大,则根据排序信息,就向下移动一位,一直到超出边界情况如果还未找到该数字,则说明该数字不在matrix中。可以看出,这种思路的时间复杂度为O(n*m)。具体代码如下:class Solution: def s...原创 2019-07-07 15:14:18 · 165 阅读 · 0 评论 -
leetcode__合并两个有序数组__python
解题思路:这个题目有一个比较好的地方就是,nums1的长度正好等于n + m,所以可以利用这一点;1.先把nums1的前m的数字移到最后面去,腾位置;2.然后将移到后面的数和nums2一一比较,将较小的放到nums1的前面去,经过O(n + m)次判断,就可以将nums1和nums2有序的放入nums1中了。具体代码如下:class Solution: def merge(sel...原创 2019-07-07 15:38:00 · 233 阅读 · 0 评论 -
leetcode__基本计算器II__python
解题思路:按照两个栈的思路去导入数字和数学操作,然后根据先乘除后加减的法则,找到第一个操作数和第二操作数即可。具体代码如下:class Solution: def calculate(self, s: str) -> int: string = '' for char in s: if char != ' ': ...原创 2019-07-18 18:03:37 · 439 阅读 · 0 评论 -
leetcode__前k个高频元素__python
解题思路:先对每个数字统计词频,然后根据词频来找到最大几个数字即可,在这里,k如果是不固定的,我们可以用极小堆来解决这个问题来得到最大的k个频数。具体代码如下:class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: my_dict = {} for...原创 2019-07-17 15:20:06 · 351 阅读 · 2 评论 -
leetcode__奇偶链表__python
解题思路:将奇数位置构成一个新链表,偶数位置的节点也构成一个新链表,然后拼接起来即可。具体代码如下:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Soluti...原创 2019-07-19 17:24:24 · 146 阅读 · 0 评论 -
leetcode__滑动窗口最大值__python
解题思路:如果只是想做大这件事件非常简单,在每一段都取max即可,但是显然这样当k=n/2的时候不符合线性时间复杂度的要求,所以我们维护一个列表,放其中的k个数字,然后没加入一个新的数字的时候都对其做一定的判断,将不满足条件的元素变为false,然后pop掉最前面的元素以及前面的所有false,然后非常容易可以找到最大值。具体代码如下:class Solution: def max...原创 2019-07-17 19:17:46 · 249 阅读 · 0 评论 -
leetcode__Excel列表序号__python
解题思路:这里的思路其实非常简单,就是一种K进制的思路,不过这里是26个字母,所以是26进制。具体代码如下:class Solution: def titleToNumber(self, s: str) -> int: res = 0 for char in s: res = res * 26 + ord(char) - ...原创 2019-07-20 12:58:58 · 77 阅读 · 0 评论 -
leetcode__四数相加II__python
解题思路:将四个变成两两相加的和的两个集合,第一个集合是A和B的元素两两相加的结果,第二个集合是C和D的元素两两相加的所有结果,然后判断是否相加等于零,统计个数即可。用列表来解题class Solution: def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int...原创 2019-07-20 13:43:13 · 190 阅读 · 0 评论 -
leetcode__常数时间插入、删除和获取随机元素__python
解题思路:按dict来保存即可在常数时间存取,然后随机返回dict的键值即可。具体代码如下:import randomclass RandomizedSet: def __init__(self): """ Initialize your data structure here. """ self.data = {...原创 2019-07-20 13:59:08 · 164 阅读 · 0 评论 -
leetcode__二叉搜索树中第K小的元素__python
解题思路:深度优先搜索,采用中序遍历的方式,然后找到第k个元素即可。具体代码如下:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right =...原创 2019-07-20 15:06:17 · 169 阅读 · 0 评论 -
leetcode__二叉树的最近公共祖先__python
解题思路:按照递归的思想即可解决本题。1.当root为p,q或者为null的时候返回本身;2.递归查找其左右子树;3.根据左右子树的结果,找到规则即可。具体代码如下:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# ...原创 2019-07-20 17:27:00 · 203 阅读 · 1 评论 -
leetcode__删除链表中的节点__python
解题思路:用下一个节点来替代本该节点即可,只需要做两次赋值即可。具体见如下代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: de...原创 2019-07-19 17:01:55 · 88 阅读 · 0 评论 -
leetcode__回文链表__python
解题思路:简单的可以直接把所有数字提出来观察是不是回文即可,我们这里只讲一下进阶解法,可以将该链表切开切成两半,根据是奇数长度还是偶数长度自己微调一下即可,然后将其中的一段翻转,然后与另一端比较,如果依次val都相同,说明是回文,否则不是回文,这样做的时间复杂度是O(n),空间复杂度为O(1)。具体代码如下:# Definition for singly-linked list.# cla...原创 2019-07-19 16:51:03 · 118 阅读 · 0 评论 -
leetcode__扁平化嵌套列表迭代器__python
解题思路:这里需要注意,初始化的时候输入的nestedList里面的元素是上面的注释的定义的类别的实例。注意调用其中的方法,其余的就比较简单了。具体代码如下:# """# This is the interface that allows for creating nested lists.# You should not implement it, or speculate about...原创 2019-07-18 18:50:31 · 180 阅读 · 0 评论 -
leetcode__逆波兰表达式求值__python
解题思路:利用栈的思想,遇到数字就push进去,遇到运算符号,将栈顶的两个元素拿来运算得到对应的值,pop掉两个运算的值,push进得到的值。注意:leetcode内置的int函数和我们平时的int函数有区别,所以在进行除法求值的时候我们需要修改一下,然后才能得到正确的值,细节可以看代码。具体代码如下:class Solution(object): def evalRPN(sel...原创 2019-07-18 19:36:41 · 152 阅读 · 0 评论 -
leetcode__复制带随机指针的链表__python
解题思路:这道题可以用O(n)的解法来做,具体步骤如下:1.将每一个节点都复制一遍,并且将复制的节点紧跟着对应的节点之后,也就是说本来是123,就变成了112233。2.由于复制的时候,我们的复制节点的random节点都指向的是原始节点,我们也应该指向对应的复制节点,就将每个复制节点的现有random节点往后移动一次,就能完成校准。3.将原始链表和复制链表分离,112233变成123和12...原创 2019-07-19 11:50:10 · 91 阅读 · 0 评论 -
leetcode__环形链表__python
解题思路:快慢指针的方法,当fast_ptr为None的时候,返回false,当fast_ptr等于slow_ptr的时候,返回True。具体代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# ...原创 2019-07-19 12:06:09 · 69 阅读 · 0 评论 -
leetcode__排序链表__python
解题思路:利用归并排序的思想,不过这里排序的不是列表,是一个链表。具体代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution...原创 2019-07-19 15:57:00 · 90 阅读 · 0 评论 -
leetcoe__相交链表__python
解题思路:先得到两个链表的长度,假设长的为长度为a,# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): d...原创 2019-07-19 16:08:35 · 76 阅读 · 0 评论 -
leetcode__有序矩阵中第K小的元素__python
解题思路1:直接将所有的元素合成一个列表,排序后取出第k小的元素即可。具体代码如下:class Solution: def kthSmallest(self, matrix: List[List[int]], k: int) -> int: my_list = [] for tmp in matrix: my_list +...原创 2019-07-17 12:25:18 · 324 阅读 · 0 评论 -
leetcode__反转链表__python
解题思路:比较简单,具体可以看代码,借助一些中间变量,做一个遍历就可以达到效果。具体代码如下:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass S...原创 2019-07-19 16:19:47 · 246 阅读 · 0 评论