算法
算法笔记
等不到你.
四格缩进
展开
-
树 - 广度优先(层次)遍历(JSON形式表示)
题目参考下图,输出 id 和 level 的映射定义 根节点的 深度 是 0,子节点的深度是父节点的 深度 + 1答案const node = { "id": 1, "level": 0, "children": [{ "id": 2, "level": 0, "children": [{ "id": 4, "level": 0, "children": [] }, { "id": 5, "level": 0, "children": []原创 2020-11-11 01:01:55 · 672 阅读 · 1 评论 -
链表 - 找到链表的第一个结点
题目寻找链表的头节点,每个节点,有 id 和 nextId 两个属性,nextId 表示指向节点 id。现在请实现一个办法寻找该链表的头节点。PS. 考虑一下链表环状,以及节点不在链表内等异常情况,出现异常时,打印异常消息即可。解答const findFirstNode = (nodeList) => { let nodes = new Map()//把当前结点和下一个结点反向存入map nodeList.forEach(item => nodes.set(item.n原创 2020-11-11 00:55:22 · 1862 阅读 · 0 评论 -
LRU缓存机制 数组 链表 两种实现
leetcode:146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put获取数据 get(key)如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数)否则返回 -1。写入数据 put(key, value)如果关键字已经存在,则变更其数据值如果关键字不存在,则插入该组「关键字/值」当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从原创 2020-11-03 11:40:34 · 282 阅读 · 0 评论 -
一文搞懂搜索树 - 二叉搜索树(排序树) AVL树 多路搜索树(B树) (2,4)树 伸展树 B+树 B*树 R树 & 性能分析
文章较长,建议参照目录参考:书 :《数据结构与算法–Python语言实现》(原名:《Data Structures and Algorithms in Python》)有序映射 - 同时提供有序序列和映射的功能有序序列le() / lt() / ge() / gt()max() / min()indexOf()range()iter()reverse()可以利用有序序列对无序元素进行排序映射map[k] - 查找map[k]=v - 添加&修改de原创 2020-10-29 23:12:48 · 577 阅读 · 0 评论 -
种花问题 - 筛选 - 数组 - javascript
leetcode:605题假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。输入: flowerbed = [1,0,0,0,1], n = 1输出: True输入: flowerbed = [1,0,0,0,1], n = 2输出: F原创 2020-10-19 09:40:06 · 77 阅读 · 0 评论 -
格雷编码 - 二进制 - 递归 - python javascript
leetcode:89题格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010 - 211 - 301 - 1输入: 0输出: [原创 2020-10-17 20:25:12 · 198 阅读 · 0 评论 -
重复的子字符串 - 正则表达式 - python javascript
leetcode:459题题目:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。输入: “abab”输出: True输入: “aba”输出: False输入: “abcabcabcabc”输出: True#python 解法1class Solution: def repeatedSubstringPattern(self, s: str) -> bool: return原创 2020-10-17 20:23:30 · 592 阅读 · 0 评论 -
正则表达式匹配 - python javascript
leetcode:10题给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素输入:s = “mississippi”p = “mis*is*p*.”输出: false//js 解法 (正则)var isMatch = function(s, p) { let isMatch = (s, p) => {原创 2020-10-17 20:21:35 · 207 阅读 · 0 评论 -
卡牌分组 - python javascript
leetcode:914题输入:[1,1,2,2,2,2]输出:true解释:可行的分组是 [1,1],[2,2],[2,2]输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]输入:[1,1,1,2,2,2,3,3]输出:false解释:没有满足要求的分组#python解法class Solution: def hasGroupsSizeX(self, deck): return原创 2020-10-17 20:19:34 · 103 阅读 · 0 评论 -
电话号码的组合(公式) - 数组 -递归 回溯 - python javascript
leetcode17题输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]#python解法(使用内置排列组合库)class Solution: def letterCombinations(self, digits: str) -> List[str]: if len(digits)==0:return [] num_letter_map={'2':'abc','3':'d原创 2020-10-17 20:16:34 · 271 阅读 · 0 评论 -
计数二进制子串 - 字符串 - python javascript
(leetcode:696)输入: “00110011”输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。#python写法class Solution: def countBinarySubstrings(self, s: str) -> int: seq0, seq1 = 0, 1 #用来记录当前正在统计的0和1的数量 res = 0 #用来统计结果原创 2020-10-17 20:12:28 · 134 阅读 · 0 评论 -
翻转字符串中的单词 - 字符串操作 - python javascript
(leetCode:557)输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”#python语法class Solution: def reverseWords(self, s: str) -> str: return " ".join([sub_s[::-1] for sub_s in s.split()])//js语法1:直接匹配字符串var reverseWords = funct原创 2020-10-17 20:09:54 · 72 阅读 · 0 评论 -
edit-distance - 编辑距离 - 动态规划 - 思路
动态规划表格练习https://alchemist-al.com/algorithms/edit-distance要编辑的两个串GAACTCAATC初始表格GGACT012345C1A2A3T4C5填了一半的表格GGACT012345C112334A22=>=>=&g原创 2020-10-17 20:06:20 · 95 阅读 · 0 评论 -
LCS - 最长公共子序列 - 动态规划 - 思路
动态规划表格练习https://alchemist-al.com/algorithms/longest-common-subsequence要匹配的两个串TACCCGCTGAAG初始表格GATGGGAT000000000A0G0T0A0填了一半的表格GATGGGAT000000000原创 2020-10-17 20:04:21 · 107 阅读 · 0 评论 -
全排列 - 深度优先遍历 & 广度优先遍历 - javascript
题目 - 全排列用例1输入[1,2,3]输出1[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解对应的树用例2输入[1,2,3,4]输出[ [ 1, 2, 3, 4 ], [ 1, 2, 4, 3 ], [ 1, 3, 2, 4 ], [ 1, 3, 4, 2 ], [ 1, 4, 2, 3 ], [ 1, 4, 3, 2 ], [ 2, 1, 3, 4 ], [ 2, 1,原创 2020-10-17 20:01:09 · 961 阅读 · 1 评论 -
CCF CSP 201503-1 python 100分
题目:思路:#先存进来#然后从后往前一列一列输出n,m=list(map(int,input().split()))martix=[]for i in range(n): temp_input=list(map(int,input().split())) martix.append([v for v in temp_input])for j in range(m-1,-1,-1): for i in range(n): print(martix[i][j]..原创 2020-07-03 12:29:39 · 245 阅读 · 0 评论 -
CCF CSP 202006-4 1246 Python 动态规划
#最后一个子任务还没做,做出来再补充#官网出题之后再补上原题简单描述下题目#1246四个数字#输入n(),S()#从1开始,对其进行迭代n次,对其每一位数字进行以2为底的幂运算#比如 "246" -> "41664(4 16 64)"##求在迭代n次之后,字符串S在长字符串中出现的次数用例:输入:926输出:5解释:迭代第九次:"166416264641626446416166416264264641626446416"..原创 2020-06-30 11:10:14 · 5331 阅读 · 0 评论