自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 406. Queue Reconstruction by Height

LeetCode 406首先想到的一个方法是,先根据他要在位置排序,然后每次插入的时候根据height来进行插入,把所有比自己矮的都略过(这样不会破坏当前矮个的位置要求),然后计算比自己高的个数,找到合适的位置,然后再过一遍把自己矮的都略过,进行插入。这样保证自己放在符合自己条件但是又是在最后的位置。 def reconstructQueueSlow(self, people: List[List[int]]) -> List[List[int]]: people = sor

2020-06-07 04:52:04 91

原创 LeetCode 528. Random Pick with Weight

LeetCode 528考虑普通random的时候,每个位置的权重是一样的。那么对于每个weight,我们给一个区间,如果random值在这个区间里面那么就算这个值,那么就算是根据weight来random了。然后怎么能快速的定位到这个区间呢,如果我们把所有的值按顺序相加。比如,我们有 【1, 2, 5, 3】那么我们转换为【0, 1, 3, 8, 11】那么两个之间的间隔就是weight,取了random之后,我们可以通过二分法快速查找这个值在那个区间。class Solution: de

2020-06-07 04:37:25 170

原创 LeetCode 472. Concatenated Words

LeetCode 472先把所有的单词放入一个set,使用dfs的方法,按照每一部分进行检查。 def findAllConcatenatedWordsInADict(self, words: List[str]) -> List[str]: words = set(words) def isConcatenated(word): #把一个单词拆成两部分,然后检查 for i in r

2020-06-07 04:32:07 115

原创 LeetCode 1439. Find the Kth Smallest Sum of a Matrix With Sorted Rows

LeetCode 1439求的是k个最小值,那么有一个可以考虑的方法就是维护一个堆,然后把最小的k-1一个pop掉。只是怎么来维护进堆的顺序。因为每行都是已经排序的,第一个组合应该是取每行中的第一个,然后可以考虑把各行前进一格的放入堆中,取出最小的一个,然后再把隔行的下一个组合放入堆中。但是要考虑重复的情况。所以如果访问过了,我们就不再加入堆。 def kthSmallest(self, mat: List[List[int]], k: int) -> int: #维护一个最小堆

2020-06-07 04:17:36 499

原创 LeetCode 1029. Two City Scheduling

LeetCode 1029有两个城市,每个城市都要分配N个人,要使得成本最少,那么就要先选那些两者差价最大的城市里面取价格小的那个。如果取满其中的N个之后,我们只能选其他的城市。 def twoCitySchedCost(self, costs: List[List[int]]) -> int: #按照差价大小倒序排列 sortedCosts = sorted(costs, key=lambda x: abs(x[0]-x[1]), reverse=True)

2020-06-07 03:06:32 103

原创 LeetCode 72. Edit Distance

LeetCode 72这个题目有个冗余条件,增加一个字符和删除一个字符其实是一样的,只是作用在不同的字符串上而已。那么剩下的就是替换或者是删除。没有想到非常好的方法,那么就考虑把每种都尝试一下,取最小的结果。 def minDistance(self, word1: str, word2: str) -> int: memo = collections.defaultdict(int) def minDistanceHelper(w1:str

2020-06-01 03:59:39 105

原创 LeetCode 973. K Closest Points to Origin

LeetCode 973最简单的方法是都求出来,然后sort一下,取k个小的就好了。实际上我们是不需要完全排序的,那么可以考虑heap,只保留k个小的,然后把其他的都pop掉。那么可以用一个max堆。超过k之后把最大的pop掉。 #python中的缺省的是min堆,转为负数当作max堆用。 def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]: minh = [] fo

2020-06-01 03:36:34 159

原创 LeetCode 207. Course Schedule

LeetCode 207也是一个图的经典问题,如果存在循环依赖,那么就没法完成。并且可能是非连通图,需要遍历每个课程。 courseStatus = [0] * numCourses graph = collections.defaultdict(list) for c1, c2 in prerequisites: graph[c2].append(c1) def dfs(course):

2020-06-01 03:29:37 81

原创 LeetCode 653. Two Sum IV - Input is a BST

LeetCode 653这个题目可以用经典的HashSet的方式来做,一遍遍历一遍把需要找的对应的pair加入到hashSet,如果遍历中发现已经存在了pair那么就有结果。但是既然给的是BST的数,我们也可以通过BST的特性来实现,一遍遍历,一遍利用BST的特性来搜索。 def findTarget(self, root: TreeNode, k: int) -> bool: if root == None: return False def findP

2020-06-01 03:24:33 86

原创 LeetCode 338. Counting Bits

LeetCode 338这个问题我觉得更像是个找规律的题目,我们先来看看0 1 2 3 4 5 6 7 8 …0 1 1 2 1 2 2 3 1 …我们可以知道每次到2的n次的时候,那么就应该只有1个bit。那么2的n次加1的bits,应该就是1(2的n次的bits)+1(1的bits),依次可以+2的bits +3的bits, 一直加到2的n次-1的bits。 def countBits(self, num: int) -> List[int]: result = [

2020-06-01 03:18:42 72

原创 LeetCode 886. Possible Bipartition

LeetCode 886第一个想法是,就直接去归类,使用两个集合,根据关系把这些点放入集合,看看是否能分类成功。 def possibleBipartitionTimeout(self, N: int, dislikes: List[List[int]]) -> bool: if len(dislikes) <= 1: return True A = set() B = set() def canBipartition

2020-06-01 03:11:28 116

空空如也

空空如也

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

TA关注的人

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