数据结构与算法
偶尔写博客
偶尔记录下自己的学习情况,我很菜。
展开
-
路径总和(先序遍历)
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 true, 因为存在目标和为...原创 2020-07-07 00:39:59 · 270 阅读 · 0 评论 -
最长有效括号(栈)
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。//错误写法,原创 2020-07-04 13:29:51 · 208 阅读 · 0 评论 -
将有序数组转换为二叉搜索树(二分+递归)
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-07-03 13:28:49 · 145 阅读 · 0 评论 -
有序矩阵中第K小的元素(通俗解法)
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。提示:你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-07-02 22:03:56 · 703 阅读 · 0 评论 -
用两个栈实现队列(队列)
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTa.原创 2020-06-30 01:16:26 · 157 阅读 · 0 评论 -
缺失的第一个正数(桶排序)
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/first-missing-positive著作权归领扣网络所有。商业转载..原创 2020-06-27 22:08:36 · 107 阅读 · 0 评论 -
单词拆分(暴力/回溯)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple...原创 2020-06-26 00:36:30 · 248 阅读 · 0 评论 -
最接近的三数之和(回溯)
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示: 3 <= nums.length <= 10^3 -10^3 <= nums[i] <= ...原创 2020-06-24 22:45:37 · 271 阅读 · 0 评论 -
受限的组合(完全背包/动规)
描述给定几个较小的数字和一个大数字,要求出这个大数字能否由这几个较小的数字组合而成,较小的数字可以重复使用,也可以不使用。如果可以组合,要输出有多少种组合方案;如果不能组合而成,输出0。比如给定数字{1,3,5}和数字7,7可以由(1,3,3)(1,1,5)(1,1,1,1,3)和(1,1,1,1,1,1,1)组合而成,一共有4种组合方案。注意(1,3,3)和(3,3,1)是同一种方案。再...原创 2020-05-12 16:00:29 · 368 阅读 · 1 评论 -
神奇的化合物(优先队列)
描述在遥远的外星球上,所有的化合物都是通过两个单质元素或者两个化合物或者一个单质元素一个化合物结合而成,任意的单质元素或者化合物都具有特定的结合能,其中单质元素的结合能是预先固定的,而化合物的结合能则是构成它的两种物质的结合能之和。两种物质结合时,需要消耗的能量恰好等于这两种物质的结合能。假定有某种化合物是由n种元素化合而成,请问要如何结合才能使得它消耗的能量最低?比如某化合物由3种单质构...原创 2020-05-12 13:11:28 · 473 阅读 · 0 评论 -
一元三次方程(二分查找)
之前做过一到这种题目,但忘记把它写入博客,这里记录一下,代码和题目要求来自于次#include <stdio.h>#include <math.h>int main(){ double a = -10; double b = 10; double c; double f1, f2, f3; do { f1 = 2*pow(a, 3) - 4*pow(a, 2) + 3*a - 6; // 得出左端项的值f1 f2 = 2*pow(b, 3)原创 2020-05-12 10:55:16 · 491 阅读 · 0 评论 -
通信网建设(最小生成树)
描述某国有n座城市,需要在这n座城市之间建造有线通信网络使得任意两座城市都可以互相通讯,任意两座城市之间要修建通信线路的费用都是大于0的整数。现在请你帮助设计一个通信网络,使得总的造价最低。测试集保证给定的网络是一个连通图。比如有5个城市,共有8条边,城市编号以及通信线路的造价如下:(1 2 2),(1 3 12),(2 3 8),(2 5 9),(4 1 10),(4 3 6),(5 ...原创 2020-05-05 21:24:45 · 3749 阅读 · 0 评论 -
高山速降比赛(dp最长递减子序列)
描述滑雪场举行了一场高山速降比赛,起点高度1000米,终点高度为0,举办者在中途设置了若干多个高度不同的落脚点,规定所有选手只能从起点到终点单向运动,每到达一个落脚点可以获得一个积分奖励,但是后一个得分落脚点的高度必须低于他前面得过分的落脚点,请你帮选手选择一条路线,使得他可以获得最多的积分奖励。例如有以下数据:1000 614 971 509 838 743 968 0表示一共有8个落...原创 2020-05-04 22:31:05 · 430 阅读 · 0 评论 -
左螺旋阵(模拟法)
描述一个n*m的左螺旋阵是一个从右上角开始逆时针方向旋转,从n*m开始依次填写数字直到1为止的矩阵(类似于蚊香盘)。例如一个4*4的左螺旋矩阵是下面这个样子的:13 14 15 1612 3 4 511 2 1 610 9 8 7再比如一个5行4列的左螺旋阵是下面这个样子的:17 18 19 2016 5 6 715 4 1 814 3 2 913 12 11 10格式...原创 2020-05-04 22:29:32 · 514 阅读 · 0 评论 -
扑克牌魔术(双端队列)
描述东哥是个乡村魔术师,COVID-19疫情期间闲来无事,用扑克牌给邻居们表演了一场小魔术:他将一叠预先洗好的扑克牌背面朝上拿在手中,先将最上面的扑克牌放到最下面,然后打开现在最上面的这张扑克牌,并放到边上,这是一张1;然后又将最上面的扑克牌放到最下面,再次打开最上面的扑克牌,这次是一张2;他依次重复这两个步骤:(1)将最上面的放到最下面,(2)打开最上面的这张扑克牌,最终打开的扑克牌依...原创 2020-05-03 22:12:33 · 1191 阅读 · 1 评论 -
逆序输出链表(数组模拟链表)
描述根据给定的数据建立一个由n(1≤n≤1000)个元素组成的链表,然后按逻辑顺序逆序输出其中所有的数据。每个元素节点由两个域组成:第一个域存储数据,第二个域存储后继元素所在的位置。特别的,头结点的第一个域用来存储整个链表的长度。例如头结点(5, 3)表示长度为5,后继元素在3号位置;元素节点(14,7)表示数据值为14,后继节点在7号位置。如果后继指针为0则表示链表结束。例如: (6, ...原创 2020-05-03 22:12:00 · 478 阅读 · 0 评论 -
按字典规则比较字符串大小(暴力枚举)
描述按照字典规则比较两个英文字符串的大小,基本规则如下:(1)字符串左对齐比较(2)字母无大小写对应关系时忽略大小写,比如'B'不仅大于'A',也大于'a'(3)字母有大小写对应关系时,大写小于小写,比如'A'小于'a'(4)字符串中只有大小写字母和空格,空格小于任何字母例如:"aBc"<"abc","abcdef"<"abD","Abcd"<"abc"格式...原创 2020-05-03 22:11:23 · 4781 阅读 · 0 评论 -
输出前k大的数(分治快排)
描述给定一个数组,统计前k大的数并且把这k个数从大到小输出。格式输入格式第一行包含一个整数n,表示数组的大小。n < 100000。 第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。 第三行包含一个整数k,k < n。输出格式从大到小输出前k大的数,每个数一行。样例输入样例104 5 6 9 ...原创 2020-04-23 16:56:55 · 1149 阅读 · 0 评论 -
最小新整数(贪心算法)
描述给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0< k < m),求生成的新整数最小为多少?例如: n=9128456,k=2,则生成的新整数最小为12456。格式输入格式第一行t, 表示有t组数据; 接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n,k。...原创 2020-04-22 22:22:19 · 3702 阅读 · 0 评论 -
高精度乘法(高精度计算)
描述输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。格式输入格式输入两个高精度正整数M和N。输出格式求这两个高精度数的积。样例输入样例363输出样例108限制时间限制: 1000 ms内存限制: 65536 KB#include<bits/stdc++.h>using namespac...原创 2020-04-22 00:55:23 · 737 阅读 · 1 评论 -
阶乘和 (高精度运算)
描述用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。输入正整数n,输出计算结果S。格式输入格式一个正整数n。输出格式计算结果S。样例输入样例5输出样例153限制时间限制: 1000 ms内存限制: 65536 KB题目其实很简单的,这个题可以拆分为两个题,一个是高精度运...原创 2020-04-21 23:33:04 · 2596 阅读 · 1 评论 -
亲戚B (普通并查集)
描述或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如Marry和Tom是亲戚,Tom和Ben是亲戚,等等。从这些信息...原创 2020-04-21 00:54:15 · 700 阅读 · 0 评论 -
家谱(map + 普通并查集)
描述现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。格式输入格式由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。规定每个人的名字...原创 2020-04-18 22:40:52 · 265 阅读 · 0 评论 -
食物链(补集/ 种类并查集)
描述动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说...原创 2020-04-16 00:35:29 · 223 阅读 · 0 评论 -
分数线划定(结构体的排序)
题目描述世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m×150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。现在就请你编写程序划定面试分数线,并输出所有进入面试...原创 2020-04-12 00:55:30 · 311 阅读 · 0 评论 -
明明的随机数(桶排序)
描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。格式输入格式有2行,第1行为1个正整数,表示所生成的随机数的个数:N;...原创 2020-04-11 23:38:25 · 426 阅读 · 0 评论 -
团伙(反集 / 种类并查集)
描述在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足:1、我朋友的朋友是我的朋友;2、我敌人的敌人是我的朋友;所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙?格式输入格式第1行为n和m,1 < n < 1000,1≤m≤100 000; 以下...原创 2020-04-10 23:11:25 · 1266 阅读 · 0 评论 -
01背包问题(dfs/DP)
描述一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。格式输入格式第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30); 第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出格式仅一行,一个数,表示最大总价值。样...原创 2020-04-07 23:21:52 · 669 阅读 · 0 评论 -
L2-024 部落 java (并查集)
L2-024 部落 (25 分)在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。输入格式:输入在第一行给出一个正整数N(≤104),是已知小圈子的个数。随后N行,每行按下列格式给出一个小圈子里的人:K P[1] P[...原创 2019-03-02 21:57:51 · 379 阅读 · 0 评论 -
踩方格(动规递推)
描述有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;b、走过的格子立即塌陷无法再走第二次;c、只能向北、东、西三个方向走;请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。格式输入格式允许在方格上行走的步数n(n≤20)。输出格式计算出的方...原创 2020-04-03 16:02:01 · 1204 阅读 · 1 评论 -
昆虫繁殖 (递推)
描述科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50。格式输入格式x,y,z的数值。输出格式过Z个月以后,共有成虫对数。样例输入样例1...原创 2020-04-02 00:24:30 · 733 阅读 · 0 评论 -
接水问题(贪心)
描述学校里有一个水房,水房里一共装有m个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。现在有n名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n编号,i号同学的接水量为wi。接水开始时,1到m号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学j完成其接水量要求wj后,下一名排队等候接水的同学k马上接替j同学的位置开始接水。这个换人的过程是瞬间完成的...原创 2020-03-31 16:23:10 · 659 阅读 · 0 评论 -
输出亲朋字符串(字符串)
描述编写程序,求给定字符串s的亲朋字符串s1。亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符; 给定字符串s的第二个字符的ASCII值加第三个字符的ASCII值,得到第二个亲朋字符;依此类推,直到给定字符串s的倒数第二个字符。亲朋字符串的最后一个字符由给定字符串s的最后一个字符ASCII值加s的第一个字符的ASCII值。...原创 2020-03-26 23:59:14 · 2985 阅读 · 2 评论 -
配对碱基链(字符串)
描述脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。而构成DNA的碱基共有4种,分别为腺瞟呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。我们知道,在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对。你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的碱基序列。格式输入格式一个字符串,表示一条碱基链。这个字符串只含有大写字母A...原创 2020-03-31 13:39:28 · 749 阅读 · 0 评论 -
移动路线(动规递推)
描述X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格中,蚂蚁从左下角的方格中移动到右上角的方格中,每步移动一个方格。蚂蚁始终在方格矩阵内移动,请计算出...原创 2020-03-30 15:31:25 · 1391 阅读 · 0 评论 -
迷宫(dfs)
描述一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。格式...原创 2020-03-29 23:59:46 · 1275 阅读 · 3 评论 -
过河卒(深搜/动规)
描述棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B。现在要求你计算出卒从A点能...原创 2020-03-28 16:01:00 · 777 阅读 · 0 评论 -
菲波那契数列(递推打表)
描述菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。格式输入格式第1行是测试数据的组数n(1 ≤ n ≤ 1000),后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 ≤ a ≤ 1000000)。输出格式n行,每行输出对应一个输入。输出应是一...原创 2020-03-27 14:59:45 · 310 阅读 · 0 评论 -
Lake Counting(dfs 深搜/ bfs广搜)
描述有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?格式输入格式第一行为N,M(1≤N,M≤110)。 下面为N*M的土地示意图。输出格式一行,共有的水洼数。样例输入样例10 12W........WW..WWW.....WWW....WW...WW..........WW....原创 2020-03-26 18:22:48 · 658 阅读 · 0 评论 -
光荣的梦想(分治)
描述Prince对他在这片大陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯。在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界、保卫这里的平衡与和谐。在那个时代,平衡是个梦想。因为有很多奇异的物种拥有各种不稳定的能量,平衡瞬间即被打破。KB决定求助于你,帮助他完成这个梦想。一串数列即表示一个世界的状态。平衡是指这串数列以升序排列。而从一串无序数列到有序数列需...原创 2020-03-25 20:47:11 · 524 阅读 · 0 评论