leetcode
bo.qiu_xbw
Talking is cheap ,show me the code.
展开
-
左成云算法进阶班(1)-KMP (python)
问题:给定一下两个字符串str(n位)与ptr(m位),求ptr在srt中出现的次数或者其出现的位置str = “ababacababadababadadda”;ptr = “ababad”;暴力破解的时间复杂度是O(n*m),可以用KMP算法去简化。下面简述一下KMP算法的思路。1.next数组是怎么产生的?next第一位是-1,第二位是0,长度和子串长度一致。假设i-1前面已经产生了最大的子串的长度cn,那么首先比较cn后面的字符(其实就是str2[cn])是否等于第i-1位置的字符(因为从0原创 2020-07-16 22:00:56 · 357 阅读 · 0 评论 -
数组中的和累加是否等于aim (python)
给你一个数组arr,和一个整数aim。如果可以任意选择arr中的 数字,能不能累加得到aim,返回true或者false思路:每个数字可以选择选或者不选,f(0,0)是起始位置,f(1,0)表示当前是第一个位置,但是第0个数我没选def dfs(arra,i,sum_,target): if i==len(arra): return sum_==target else: return dfs(arra,i+1,sum_,target) or dfs(arra,i+1,sum_+arra[i,原创 2020-07-12 19:53:30 · 221 阅读 · 0 评论 -
矩阵最短路径
问题:给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径和中最小的路径和。import numpy as npdef f(matrix, i, j): #到达最右下角 if i == len(matrix)-1 and j == len(matrix[0])-1: return matrix[i][j] if i == len(matrix)-1: return f(matrix,原创 2020-07-12 10:13:53 · 452 阅读 · 0 评论 -
1353. 最多可以参加的会议数目 python
给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你返回你可以参加的 最大 会议数目。思路:按照结束时间进行排序,对于第 ii 天,如果有若干的会议都可以在这一天开,那么我们肯定是让 endDayendDay 小的会议先在这一天开才会使答原创 2020-07-11 14:10:29 · 407 阅读 · 0 评论 -
项目的最大收益(python)
贪心思路:其实建堆是比较好的,但是python的堆有点鸡肋,所以用list去代替了,主要就是构建一个项目,将benjin与zhuanqian去捆绑,健在一个cost按照benjin排序,一个profit按照利润最大排序,然后就好了。链接里有伪代码https://blog.csdn.net/weixin_41362649/article/details/94637472benjin = [20,10,30]zhuanqian = [21,15,33]#这道题如果用python的话,建议还是用比较器和原创 2020-07-11 13:28:04 · 980 阅读 · 0 评论 -
切金条最省铜板问题(python)
题目是:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板?思路比较简单:建造一个最小堆(用数组也能实现,主要就是为了取出最小的两个数),然后把这两个数求和放在原数组在取出最小的两个数,直到只剩下最后一个数。from heapq import *res = []for i in k: heappush(res, i)out = 0while len(res) > 1:原创 2020-07-11 12:17:21 · 262 阅读 · 0 评论 -
前缀树Trie (python版本)(leetcode 208题)
class TrieNode(object): def __init__(self): self.path=0 self.end=0 self.map=[None for i in range(26)]class Trie: def __init__(self): """ Initialize your data structure here. """ self.root=Tr.原创 2020-07-08 20:16:59 · 181 阅读 · 0 评论 -
计算完全二叉树的节点个数(python)
用O(n)的时间复杂度就不说了,这里说用小于O(n)的时间复杂度。def nums_node(root): if not root: return None return bs(root,1,max_height(root,1))def bs(node,level,height): #开始level=1 #height是一个不变的值,可以看做是一个全局变量,代表树的最大深度。 if level==height: return 1 #如果右边子树的最左节点到底了 #说明左边子树是满原创 2020-06-30 22:08:44 · 700 阅读 · 0 评论 -
leetcode-3. 无重复字符的最长子串(python)
思路:没遇到重复的子串就记录长度,遇到了,就从那个重复的字母的后一个开始重新计算子串。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not str: return 0 tmp="" length=0 f...原创 2020-03-07 10:45:06 · 179 阅读 · 0 评论 -
0-1背包问题(python)
解决办法:声明一个 大小为 m[n][c] 的二维数组.m[ i ][ j ] 表示 在面对第 i 件物品,且背包容量为 j 时所能获得的最大价值(1). j < w[i] 的情况,这时候背包容量不足以放下第 i 件物品,只能选择不拿m[ i ][ j ] = m[ i-1 ][ j ](2). j>=w[i] 的情况,这时背包容量可以放下第 i 件物品,我们就要考虑拿这件...原创 2020-03-06 13:48:05 · 391 阅读 · 0 评论 -
如何在n个数组中找出它的中位数(python)-不用排序算法
题目中说了不允许用排序算法,但是中位数,这个很容易联想到快排。那就是可以用快排的思想。任意挑选一个元素,以该元素为key, 划分数组为两个部分,如果左侧数组长度刚好为(n-1)/2, 那么key就为中位数, 若左侧数组长度 < (n-1)/2 , 那么中位数点在右侧,反之,中位数在左侧。然后进入相应的一侧继续寻找中位class Solution(object): def find...原创 2020-03-06 11:04:01 · 1576 阅读 · 0 评论 -
leetcode -2. 两数相加(python)
这题最好还是不要全部算出来答案在依次分配位数吧,不然0offer。注意点:一个节点可以指向多个节点,但是会被依次覆盖,这个以前还真没用过,没想到编译过了# -*- coding: UTF-8 -*-# Definition for singly-linked list.# class ListNode: # 定义链表节点类# def __init__(self, x):# ...原创 2020-03-05 22:51:25 · 146 阅读 · 0 评论 -
leetcode -1103. 分糖果 II(python)
class Solution: def distributeCandies(self, candies: int, num_people: int) -> List[int]: if not candies: return [] res=[0]*num_people j=1 while candi...原创 2020-03-05 21:23:38 · 234 阅读 · 0 评论