随笔分类 - 算法与数据结构
摘要:# 二分合并k个有序数组 nums1 = [2,3,18,23,118,283] nums2 = [4,7,8,19,26,77,1262] nums3 = [1,19,29,33,67,88] nums4 = [36,47,55,88,128,765] data = [nums1, nums2,
阅读全文
摘要:# 对称字符串,101, 96, 88. 中间字符: "", 0, 1, 8 两端字符: 1, 8, 6, 9 # 知识库: mapping = {"1":1, "8":8, "6":9, "9":6} s = "1110111" def solve(s): # 双指针,left:n->1, rig
阅读全文
摘要:数据日期: 2020/03/26 (此时LeetCode题目数量:1582)数据来源: LeetCode官方,将不同类别的题目按照官方给的出现频率(Frequency)降序排列,取有频率统计的题 排序题号题目通过率难度 1 #5 Longest Palindromic Substring 0.291
阅读全文
摘要:问题:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 思考:对称结构要想到stack 方案一:双指针法 将节点值赋值到数组中,使用双指针依次比较元素 # Definition for singly-linked list. #
阅读全文
摘要:# 实现Trie树: 字典套字典 class Trie(): def __init__(self): self.child = {} def insert(self, word): current_node = self.child for e in word: if e not in curren
阅读全文
摘要:设定划定窗口的长度,在给定列表上做滑动,求每次滑动的最大值 nums, k = [1,3,-1,-3,5,3,6,7], 3 result = [] # method 1:bf for i in range(len(nums)-k+1): result.append(max(nums[i:i+k])
阅读全文
摘要:主要思路:借鉴堆、队列特点,构建新的有序结果 # merge the k sorted list # main idea: 将每个list放入队列,初始一个小顶堆,size为list个数,value为队列的首个元素,交替寻找最小值存储到新list中 import heapq from collect
阅读全文
摘要:问题:在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1&
阅读全文
摘要:问题: 给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。 每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满
阅读全文
摘要:问题: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例: 输入: [ [1,3,1], [1,5
阅读全文
摘要:问题:在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 : 一张 为期一天 的通行证售价为 costs[0] 美元;一张 为期七天 的通行证售价为 c
阅读全文
摘要:问:四个人玩牌,去掉大小王,一个人拿牌的组合有多少种可能 方法一:DFS # 牌的组合数.常识:13*4+2=54 张牌。每一类大小可以拿的张数有:0, 1, 2, 3, 4。问:四个人玩牌,一个人拿牌的组合数有多少种 count = 0 card_num = 0 def num_conbinati
阅读全文
摘要:方法一、暴力法 方法二、前缀和 + HashMap 求解和的方式往往能够分解成sum-k方式,查找此key是否在该dict中,count累加计数 # prefix sum nums = [1,1,1,1] k, count = 2, 0 dic = {0:1} # 和为key的前缀和有value个
阅读全文
摘要:一个文本卷积模块 def cnn(): import numpy as np result = [] n, dim = 10, 30 kernels = [np.random.randint(0,2,(i, dim)) for i in range(3,6)] # 生成3个长度不同的一维卷积核 da
阅读全文
摘要:前缀型动态规划 def longest_common_seq(s1, s2): if not s1 or not s2: return m, n = len(s1), len(s2) # dp[i][j] = max(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]),当前字
阅读全文
摘要:前缀、序列型动态规划 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5
阅读全文
摘要:记忆化搜索是DP的一种实现方式,等价于动态规划 一个经典的例子:数字三角形 给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于
阅读全文
摘要:最长公共前后缀学习:https://www.shpity.com/index.php/archives/262/ 参考资料:https://www.geeksforgeeks.org/kmp-algorithm-for-pattern-searching/ https://iq.opengenus.
阅读全文
摘要:定义f[i][j]为word1前i个字符到word2的前j个字符的转化的最小步。 接着,我们来考虑状态转移方程。 假设对于f[i][j]以前的之都已知,考虑fi的情形。 若word1[i] = word2[j],那么说明只要word1的前i-1个能转换到word2的前j-1个即可,所以
阅读全文