
数据结构与算法
林间松韵
这个作者很懒,什么都没留下…
展开
-
LintCode 92.背包问题
描述在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]样例样例 1: 输入: [3,4,8,5], backpack size=10 输出: 9样例 2: 输入: [2,3,5,7], backpack size=12 输出: 12 /// 背包问题/// 记忆化搜索/// 时间复杂度: O(n * C) 其...原创 2019-08-19 16:27:00 · 259 阅读 · 0 评论 -
LintCode 138.子数组之和
描述给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置样例样例 1:输入: [-3, 1, 2, -3, 4]输出: [0,2] 或 [1,3] 样例解释: 返回任意一段和为0的区间即可。样例 2:输入: [-3, 1, -4, 2, -3, 4]输出: [1,5]注意事项至少有一个子数组的和为 0代码部分...原创 2019-06-19 20:38:47 · 335 阅读 · 0 评论 -
LintCode 111.爬楼梯
描述假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?样例Example 1: Input: n = 3 Output: 3 Explanation: 1) 1, 1, 1 2) 1, 2 3) 2, 1 total 3.Example 2: Input: n = 1 Output: 1 Ex...原创 2019-06-19 17:17:46 · 161 阅读 · 0 评论 -
LintCode 110.最小路径和
描述给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。样例样例 1: 输入: [[1,3,1],[1,5,1],[4,2,1]] 输出: 7 样例解释: 路线为: 1 -> 3 -> 1 -> 1 -> 1。样例 2: 输入: [[1,3,2]] 输出: 6 解释: 路线是: 1 ...原创 2019-06-09 20:08:22 · 265 阅读 · 0 评论 -
LintCode 822.相反的顺序存储
描述给出一个链表,并将链表的值以倒序存储到数组中。样例样例1输入: 1 -> 2 -> 3 -> null输出: [3,2,1]样例2输入: 4 -> 2 -> 1 -> null输出: [1,2,4]注意事项您不能改变原始链表的结构。 ListNode 有两个成员变量:ListNode.val 和 ListNode...原创 2019-06-09 16:25:49 · 302 阅读 · 0 评论 -
LintCode 112.删除排序链表中的重复元素
描述给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例样例 1: 输入: null 输出: null样例 2: 输入: 1->1->2->null 输出: 1->2->null样例 3: 输入: 1->1->2->3->3->null 输出: 1->2->3->null...原创 2019-06-09 15:49:47 · 153 阅读 · 0 评论 -
LintCode 79. 最长公共子串
描述给出两个字符串,找到最长公共子串,并返回其长度。样例样例 1: 输入: "ABCD" and "CBCE" 输出: 2 解释: 最长公共子串是 "BC"样例 2: 输入: "ABCD" and "EACB" 输出: 1 解释: 最长公共子串是 'A' 或 'C' 或 'B'挑战O(n x m) time and memory....原创 2019-06-19 10:48:33 · 191 阅读 · 0 评论 -
LintCode 375.克隆二叉树
描述深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例样例1:输入: {1,2,3,4,5}输出: {1,2,3,4,5}解释:样例中二叉树如下所示: 1 / \ 2 3 / \4 5样例2:输入: {1,2,3}输出: {1,2,3}解释:样例中二叉树如下所示: 1 / \2 3...原创 2019-06-14 10:07:26 · 150 阅读 · 0 评论 -
LintCode 69.二叉树的层序遍历
描述给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例样例 1:输入:{1,2,3}输出:[[1],[2,3]]解释: 1 / \ 2 3它将被序列化为{1,2,3}层次遍历样例 2:输入:{1,#,2,3}输出:[[1],[2],[3]]解释:1 \ 2 /3它将被序列化为{1,#,2,3}层次遍历代码部...原创 2019-06-06 22:06:46 · 141 阅读 · 0 评论 -
LintCode 96.链表划分
描述给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例样例 1:输入: list = null, x = 0输出: null 样例解释: 空链表本身满足要求样例 2:输入: list = 1->4->3->2->5->2->null, x = 3...原创 2019-06-06 21:44:48 · 132 阅读 · 0 评论 -
LintCode 93.平衡二叉树
描述给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。样例样例 1: 输入: tree = {1,2,3} 输出: true 样例解释: 如下,是一个平衡的二叉树。 1 / \ 2 3 样例 2: 输入: tree = {...原创 2019-06-06 20:28:26 · 1361 阅读 · 0 评论 -
LintCode 488.快乐数
描述写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例例1:输入:19输出:true说明:19是一个快乐的数字 1 ^ 2 + 9 ^ 2 = 82 8 ^ 2 ...原创 2019-06-19 20:40:45 · 155 阅读 · 0 评论 -
LintCode 627.最长回文串
描述给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。样例样例 1:输入 : s = "abccccdd"输出 : 7说明 : 一种可以构建出来的最长回文串方案是 "dccaccd"。注意事项假设字符串的长度不会超过 1010。代码部分import java...原创 2019-06-19 20:43:41 · 231 阅读 · 0 评论 -
LintCode 97,155 二叉树的最小最大深度
1 二叉树的最小深度描述给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的最短路径上的节点数量。样例样例 1:输入: {}输出: 0样例 2:输入: {1,#,2,3}输出: 3 解释: 1 \ 2 / 3 它将被序列化为 {1,#,2,3}样例 3:输入: {1,2,3,#,#,4,5}...原创 2019-06-15 16:16:31 · 135 阅读 · 0 评论 -
LintCode 两个数组的交集
547.两数组的交集描述给出两个数组,写出一个方法求出它们的交集样例例1:输入: nums1 = [1, 2, 2, 1], nums2 = [2, 2], 输出: [2].例2:输入: nums1 = [1, 2], nums2 = [2], 输出: [2].挑战可以用三种不同的方法实现吗?注意事项结果中的每个元素必须是唯一的。 结果需要...原创 2019-07-02 10:45:01 · 249 阅读 · 0 评论 -
LintCode 1144.范围加法之二
描述给定一个m * n 的全零矩阵M,以及一些更新操作。操作由2D数组表示,并且每个操作由具有两个正整数a和b的数组表示,对于一个操作[a,b],这意味着M [i] [j] 会在所有0 <= i <a且0 <= j <b 的i,j位置上加1.在执行完所有操作后,您需要计算并返回矩阵中的最大整数的个数。样例样例 1:输入: m = 3, n = 3...原创 2019-07-02 09:56:21 · 232 阅读 · 0 评论 -
LintCode 1173.反转字符串
描述给定一个字符串句子,反转句子中每一个单词的所有字母,同时保持空格和最初的单词顺序。样例输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意事项字符串中,每一个单词都是由空格隔开,字符串中不会有多余的空格。代码部分public class Solution { /**...原创 2019-06-26 17:12:18 · 174 阅读 · 0 评论 -
LintCode 397.最长上升连续子序列
描述给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)样例样例 1:输入:[5, 4, 2, 1, 3]输出:4解释:给定 [5, 4, 2, 1, 3],其最长上升连续子序列(LICS)为 [5, 4, 2, 1],返回 4。样例 2:输入:[5,...原创 2019-06-18 15:54:39 · 1576 阅读 · 0 评论 -
LintCode 114,115. 不同的路径
一.不同的路径描述有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径?样例Example 1:Input: n = 1, m = 3Output: 1 Explanation: Only one path to target position.Example 2:I...原创 2019-06-18 10:16:35 · 252 阅读 · 0 评论 -
LintCode 166.链表倒数第n个节点
描述找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例Example 1: Input: list = 3->2->1->5->null, n = 2 Output: 1Example 2: Input: list = 1->2->3->null, n = 3 Output: 1代码部分/** * ...原创 2019-06-11 16:20:39 · 163 阅读 · 0 评论 -
LintCode 173:链表插入排序
描述用插入排序对链表排序样例样例 1: 输入: 0->null 输出: 0->null样例 2: 输入: 1->3->2->0->null 输出 :0->1->2->3->null 代码部分/** * Definition for ListNode * public class List...原创 2019-06-21 11:16:07 · 140 阅读 · 0 评论 -
LintCode 1. A + B 问题
描述给出两个整数 a 和 bb , 求他们的和。样例样例 1:输入: a = 1, b = 2输出: 3 样例解释: 返回a+b的结果.样例 2:输入: a = -1, b = 1输出: 0 样例解释: 返回a+b的结果.挑战显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用+++等算数运算符)代码部分 ...原创 2019-06-05 09:46:33 · 229 阅读 · 0 评论 -
LintCode 661. 把二叉搜索树转化成更大的树
描述给定二叉搜索树(BST),将其转换为更大的树,使原始BST上每个节点的值都更改为在原始树中大于等于该节点值的节点值之和(包括该节点)。样例样例1:输入 : {5,2,13} 5 / \ 2 13输出 : {18,20,13} 18 / ...原创 2019-06-20 16:15:31 · 170 阅读 · 0 评论 -
LintCode 53. 翻转字符串中的单词
描述给定一个字符串,逐个翻转字符串中的每个单词。样例样例 1: 输入: "the sky is blue" 输出: "blue is sky the" 样例解释: 返回逐字反转的字符串.样例 2: 输入: "hello world" 输出: "world hello" 样例解释: 返回逐字反转的字符串.说明单词的构成:无空格...原创 2019-06-10 15:57:56 · 200 阅读 · 0 评论 -
LintCode 2.尾部的零
描述设计一个算法,计算出n阶乘中尾部零的个数样例样例 1: 输入: 11 输出: 2 样例解释: 11! = 39916800, 结尾的0有2个。样例 2: 输入: 5 输出: 1 样例解释: 5! = 120, 结尾的0有1个。挑战O(logN)的时间复杂度代码部分public class Solution { pu...原创 2019-06-05 10:08:18 · 544 阅读 · 0 评论 -
剑指Offer 28. 字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.*; public class Solution { pub...原创 2019-05-06 10:31:24 · 120 阅读 · 0 评论 -
LintCode 1193.检测大写的正确性
描述:给定一个单词,你需要判断其中大写字母的使用是否正确。当下列情况之一成立时,我们将单词中大写字母的用法定义为正确:这个单词中的所有字母都是大写字母,如“USA”。这个单词中的所有字母都不是大写字母,如“leetcode”。如果它有多个字母,例如“Google”,那么这个单词中的第一个字母就是大写字母。否则,我们定义该单词没有以正确的方式使用大写字母。样例:输入: "U...原创 2019-03-28 10:35:57 · 287 阅读 · 0 评论 -
LintCode 1237.回旋镖的数量
描述:在平面中给定 n 个点,每一对点都是不同的,“回旋镖”是一个点的的元素 (i,j,k) ,其中 i 和 j 之间的距离与 i 和 k 之间的距离相同(元素的顺序是重要的)。找到回旋镖的数量。您可以假设 n 最多为500并且点的坐标都在 [-10000,10000](包括)范围内。样例:输入:[[0,0],[1,0],[2,0]]输出:2说明:两个回旋镖是[...原创 2019-03-27 16:10:20 · 171 阅读 · 0 评论 -
LintCode 1225.岛的周长
描述:给定一张用二维数组表示的网格地图,其中1表示陆地单元格,0表示水域单元格。网格地图中的单元格视为水平/垂直相连(斜向不相连)。这个网格地图四周完全被水域包围着,并且其中有且仅有一个岛(定义为一块或多块相连的陆地单元格)。这个岛不包含湖(定义为不和外围水域相连的水域单元格)。一个地图单元格是边长为一的一个长方形;网格地图是一个矩形,并且它的长和宽不超过100。你要做的是求这个岛的周长。...原创 2019-03-27 10:09:21 · 191 阅读 · 0 评论 -
LintCode 423.有效的括号序列
描述:给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]" 则是无效的括号。样例1:输入:"([)]"输出:False样例2:输入:"()[]{}"输出:True代码:public b...原创 2019-03-26 09:36:46 · 290 阅读 · 0 评论 -
选择排序算法
选择排序(不稳定)原创 2019-03-13 19:17:23 · 200 阅读 · 0 评论 -
LintCode 655.大整数加法
描述:以字符串的形式给出两个非负整数 num1 和num2,返回 num1 和 num2 的和。num1 和 num2 的长度都小于5100。 num1 和 num2 都只包含数字 0-9。 num1 和 num2 都不包含任何前导零。 您不能使用任何内置的 BigInteger 库内的方法或直接将输入转换为整数。样例:输入:num1="123",num2="45"输...原创 2019-03-22 10:48:11 · 284 阅读 · 0 评论 -
Sort Color(Leetcode 75)
问题描述给定一个有n个元素的数组,数组中元素的取值只有0,1,2三种可能。为这个数组排序。基本解法1.计数排序C++(Java代码和C++基本没区别,略了)我们只需要遍历一遍数组,分别统计0,1,2的元素的个数,然后重新装填到数组中就实现了题目要求。void sortColors(vector<int>& nums){ int count[3]={0};//只有三...原创 2019-03-13 10:55:08 · 177 阅读 · 0 评论 -
Moze Zeros(Leetcode 283)
问题描述给定一个数组nums,写一个函数,将数组中的所有的0挪到数组的末尾,而维持其他所有非0元素的相对位置。举例:num = [0, 1, 0, 3, 12],函数运行后结果为[1, 3, 12, 0, 0]基本解法1.C++版本//时间复杂度:O(n)//空间复杂度:O(n)void moveZeroes(vector&lt;int&gt;&amp; nums) { vecto...原创 2019-03-12 17:18:10 · 216 阅读 · 0 评论 -
二分查找(参照慕课网)
二分查找(BinarySearch)1.要求:数列有序且为顺序结构存储2.描述:1.先查找数列中间内容,判断是否为想要查找的元素。如果是,则查找完成,如果不是,判断所要查找元素比当前元素大还是比当前元素小,从而判断所要查找的元素的所在区间。我们在区间端点设置两个哨兵,结束条件为区间端点(大小两个)重合或错位。2.时间复杂度O(h)=O(log2n)。3.最坏情况下,二分查找需比较log...原创 2019-03-12 10:16:33 · 262 阅读 · 0 评论 -
归并排序算法
归并排序(Merge Sort) 归并排序是稳定的算法,需要额外开辟O(n)的空间来存储数据。算法具体过程可以理解为先把数据分成一半,把两半数据分别进行排序,再把每半继续分成一半分别进行排序,如此向下递归。 之后一级一级向上归并,归并到最顶层时则数据自然全部有序了。 设立了三个索引的位置。void __merge(int arr[],int l,int m...原创 2019-03-14 19:13:06 · 199 阅读 · 0 评论 -
链表合并
描述:已知两个链表head1和head2各自有序,请把它们合并成一个依然有序的链表。结果链表要包含head1和head2的所有结点,即结点值相同。方法1:递归法具体步骤如下所示:1)比较链表1(head1)和链表2(head2)的第一个结点数据,如果head1.data<head2.data,则把结果链表头结点指向链表head1中的第一个结点。2)对剩余的链表head1....原创 2019-04-11 10:33:38 · 559 阅读 · 0 评论 -
LintCode 595.Binary Tree Longest Consecutive Sequence
(先码,代码是看别人的,还有地方有点迷糊)描述:给一棵二叉树,找到最长连续路径的长度。这条路径是指 任何的节点序列中的起始节点到树中的任一节点都必须遵循 父-子 联系。最长的连续路径必须是从父亲节点到孩子节点(不能逆序)。样例:例1:输入: 1 \ 3 / \ 2 4 \ 5输出:3解释:Lo...原创 2019-03-28 21:25:23 · 167 阅读 · 0 评论 -
LintCode 30.插入区间
描述:给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例:样例 1:输入:(2, 5) into [(1,2), (5,9)]输出:[(1,9)]样例 2:输入:(3, 4) into [(1,2), (5,9)]输出:[(1,2), (3,4...原创 2019-04-08 10:41:31 · 229 阅读 · 0 评论 -
LintCode 33.N皇后问题
描述:n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。样例:例1:输入:1输出: [["Q"]]例2:输入:4输出:[ // Solution 1 [".Q..", "...原创 2019-05-06 10:57:18 · 187 阅读 · 0 评论