自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 问答 (2)
  • 收藏
  • 关注

原创 Leetcode 169. Majority Element

这道题有个经典的解决方式:Moore voting,Moore voting的限制条件为数组中必定存在一个数出现的次数>=n/2。它的基本思想是如果有两个不同的数,则将它们从数组中删除,不影响最后的结果。因此遍历数组,记录一个candidate以及它出现的次数count。每次遇到=candidate的数,则将count加1,否则将count减1。当count<0时,表示此时可以...

2020-03-31 12:20:09 95

原创 Leetcode 164. Maximum Gap

这道题先排序再遍历一遍能够直接AC,但是在讨论区有人提出了使用桶排序的方式,理论上比直接调库排序更加快,但实际上直接调库速度更快。首先,定义max, min, N分别为数组最大值、最小值、以及数组长度,根据抽屉原理,显然maximum gap ≥ gap = round_up[(max - min) / (N-1)]。反证法如果maximum gap < gap,则会出现 min +...

2020-03-30 11:53:52 114

原创 Leetcode 155. Min Stack

这道题需要用一个栈记录存放的数字,另一个递减栈存放最小值的情况。当push一个元素x时,当x小于递减栈的最小值时,需要将x放入递减栈中。pop一个元素时,同时需要检查它是否在递减栈并从递减栈中pop出。class MinStack(object): def __init__(self): """ initialize your data stru...

2020-03-27 13:00:15 82

原创 Leetcode 16. 3Sum Closest

这道题与15. 3Sum的思路完全一样,先对数组排序,然后固定住第一个数,用2 pointer查找其余的两个数。class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int ...

2020-03-26 11:43:19 142

原创 Leetcode 142. Linked List Cycle Ⅱ

这道题是Linked List Cycle的拓展,如图,相遇点为Linked List Cycle中的相遇点:第一次相遇时:慢指针移动了d+t快指针移动了d+t+Kr (K表示某个正整数)由于慢指针速度是快指针的1/2,所以2(d+t) = d+t+Kr,即d+t = Kr,即d = Kr - t从第一次相遇点开始移动Kr-t的距离,恰好到cycle开始的位置,因...

2020-03-22 11:25:48 213

原创 Leetcode 141. Linked List Cycle

用两个快慢指针均从列表头部开始,慢指针每次前进一步,快指针每次前进两步,如果成环,则它们会相遇。# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclas...

2020-03-22 11:08:17 88

原创 Leetcode 4. Median of Two Sorted Arrays

2020-03-22 10:56:22 39

原创 Leetcode 132. Palindrome Partitioning Ⅱ

首先用一个二维数组isPalindrome[i][j]表示输入字符串的子字符串s[i]s[i+1]...s[j]是否为回文。求解isPalindrome的方法(DP):isPalindrome[i][j] = True only if (s[i] == s[j] and isPalindrome[i+1][j-1] = True)然后创建一维数组cut[i]表示输入字符串的子字符串...

2020-03-22 10:56:15 53

原创 Leetcode 137. Single Number Ⅱ

建立长度为32的数组bit,bit[i]表示nums中有多少个元素32位二进制表示中第i个bit为1,遍历一遍nums,将每个num中二进制表示出现1的位加入bit数组,最后检查bit数组,找出不为3的倍数的位,将其还原成只出现1次的数字。class Solution(object): def singleNumber(self, nums): """...

2020-03-22 10:55:51 68

原创 Leetcode 128. Longest Consecutive Sequence

先将数组存入字典中,然后遍历数组,当遇到一个数num,满足num-1不在字典中时,找出以它开头序列长度。最后返回所有序列最长的结果即可。class Solution(object): def longestConsecutive(self, nums): """ :type nums: List[int] :rtype: in...

2020-03-21 11:56:33 64

原创 Leetcode 123. Best Time to Buy and Sell Stock Ⅲ

总共有4中交易状态:第一次买入,第一次卖出,第二次买入,第二次卖出。为每一种状态建立dp数组,dp[i][j]表示第j天处于第i个状态时手上拥有的最多的资产。其中:第j天时处于第i次买入状态下拥有的最多资产:dp[i\*2][j] = max(当天不进行交易,当天进行交易) = max(dp[i\*2][j-1], dp[i\*2-1][j-1] - ...

2020-03-21 11:55:48 70

原创 Leetcode 95. Unique Binary Search Trees Ⅱ

使用递归的方式,递归函数输入[start, end]范围,输出由这个范围内的数字组成的BST。递归函数内部,遍历[start,end]选择一个根节点i,则左子树为[start,i-1]的BST,右子树为[i+1,end]的BST。# Definition for a binary tree node.# class TreeNode(object):# def __init_...

2020-03-21 11:54:44 81

原创 Leetcode 48. Rotate Image

矩阵顺时针旋转等价于:1.先将矩阵进行上下翻转:swap(matrix[i][j], matrix[row-i-1][j])2.再求转置:swap(matrix[i][j], matrix[j][i])同样的,矩阵逆时针旋转等价于:1.先将矩阵进行左右翻转:swap(matrix[i][j], matrix[i][column-j-1])2.再求转置:swap(matrix[...

2020-03-21 11:53:57 64

原创 Leetcode 45. Jump Game Ⅱ

记录每一跳所能达到的最大范围。如对于[2,3,1,1,4]而言,初始点在nums[0] = 2处第1跳:最远可以到达nums[0] + 0 = 2第2跳:检查从nums[1]~nums[2]中,最远可以到达的距离,为nums[1]+1 = 4第3跳:由于4已经到达了终点,因此终止class Solution(object): def jump(self, nums...

2020-03-21 11:53:15 90

原创 Leetcode 42. Trapping Rain Water

计算每一个x=i处能够容纳多少水,最后求和。x=i处容纳的水宽度为1,水面高度为向左看到的最高柱子和向右看到的最高柱子中的最小值,容纳的水高度还需要减去x=i处的高度。class Solution(object): def trap(self, height): """ :type height: List[int] ...

2020-03-21 11:52:36 55

原创 Leetcode 15. 3Sum

首先对数据进行排序。遍历数组,固定三元组中第一个数(i),从后面的数组nums[i+1:]中利用high, low 2个指针,找出和为-nums[i]的所有pair。对于数组[-1,0,1,2,-1,-4],排序得到[-4,-1,-1,0,1,2] (1)固定-4,找出[-1,-1,0,1,2]中和为4的数,未找到 (2)固定-1,找出[-1,0,1,2]中和为1的数,找到[-1...

2020-03-21 11:51:57 87

原创 Leetcode 11. Container With Most Water

设置2个pointer,初始时分别指向第一个vertical line(point1)和最后一个vertical line(point2)。如果point1高度小于point2高度,此时所有point1和point2之间的vertical line与point1组成的容器容量均小于当前容量,因此,下一个检查的应当是point1++。同理,如果point2高度小于point1高度,此时...

2020-03-21 11:51:04 55

原创 Leetcode 10. Regular Expression Matching

这道题需要用动态规划的方式来求解。子问题:dp[i][j]表示s[:i]是否能用p[:j]来匹配初始化:1.dp[0][0]=True2.dp[t][0]=False,1<=t<=len(s)3.对于dp[0][k], 1<=k<=len(p)的情况,只有当p[:k]全部为X\*X\*X\*这样的形式(X代表任意字母或者'.'),dp[0][t]才为Tru...

2020-03-21 11:49:37 86

原创 Leetcode 4. Median of Two Sorted Arrays

1.将nums1,nums2所有的数分到两个组(group1, group2)内,保证第一个组的所有元素<=第二个组,且第一个组的元素个数为num1 + nums2元素众数整除2(total//2),如果找到这样的分组,则分奇偶讨论。1)总元素个数为偶数时,中位数为(max(group1), min(group2))/2。2)总元素个数为奇数时,中位数为min(group2)。2.如...

2020-03-21 11:48:18 79

空空如也

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

TA关注的人

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