leetcode-数据结构和算法
csdnyq
这个作者很懒,什么都没留下…
展开
-
搜索插入位置
搜索插入位置一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0官方思路是:设pos是要求的索引值,有2种情况,一种是存在这个数,这时target = nums[pos原创 2020-11-04 16:01:56 · 117 阅读 · 0 评论 -
回文数
回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。思路1:先把数字转成字符串,在用双指针比较前后位置对应的2个字符是否相同class Solution {原创 2020-11-04 14:01:39 · 4352 阅读 · 0 评论 -
938. 二叉搜索树的范围和
938. 二叉搜索树的范围和题目描述给定二叉搜索树的根结点root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32示例2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10输出:23...原创 2020-01-16 15:19:49 · 143 阅读 · 0 评论 -
23. 合并K个排序链表
23. 合并K个排序链表题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6实现1每次取出两个链表,合并成一个/** * Definition for ...原创 2019-12-29 20:22:39 · 100 阅读 · 0 评论 -
384. 打乱数组
384. 打乱数组题目描述打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。solution.shuffle();// 重设数组到它的初...原创 2019-12-21 11:23:23 · 70 阅读 · 0 评论 -
70. 爬楼梯
70. 爬楼梯题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 ...原创 2019-10-20 18:47:44 · 79 阅读 · 0 评论 -
53. 最大子序和
53. 最大子序和题目描述给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。实现1 - 暴力法思路从前向后遍历,找出以当前...原创 2019-10-19 20:43:13 · 91 阅读 · 0 评论 -
322. 零钱兑换
322. 零钱兑换题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出...原创 2019-10-18 19:26:48 · 60 阅读 · 0 评论 -
509. 斐波那契数
509. 斐波那契数题目描述斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0)...原创 2019-10-18 14:57:23 · 81 阅读 · 0 评论 -
190. 颠倒二进制位
190. 颠倒二进制位题目描述颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 9641761...原创 2019-10-12 14:53:09 · 174 阅读 · 0 评论 -
73. 矩阵置零
73. 矩阵置零题目描述给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [1,...原创 2019-09-21 16:08:01 · 70 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(...原创 2019-09-20 16:14:57 · 56 阅读 · 0 评论 -
75. 颜色分类
75. 颜色分类题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排...原创 2019-09-22 14:12:10 · 207 阅读 · 0 评论 -
268. 缺失数字
268. 缺失数字题目描述给定一个包含 0, 1, 2, …, n中n个数的序列,找出 0 … n中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?思路1使用 计数排序 的思想实现1class Solution {...原创 2019-09-22 14:45:54 · 138 阅读 · 0 评论 -
38. 报数
38. 报数题目描述报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“...原创 2019-09-26 13:57:20 · 80 阅读 · 0 评论 -
371. 两整数之和
371. 两整数之和题目描述不使用运算符 + 和 - ,计算两整数a、b之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1思路a ^ b:代表a和b的没有进位的和(a & b)<<1:代表a、b的和的进位在下面的实现中,b代表进位,就是要继续添加的数实现class Solution...原创 2019-09-27 10:58:33 · 66 阅读 · 0 评论 -
17. 电话号码的字母组合
17. 电话号码的字母组合题目描述给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路...原创 2019-09-29 10:55:59 · 173 阅读 · 0 评论 -
121. 买卖股票的最佳时机
121. 买卖股票的最佳时机题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润...原创 2019-10-11 09:35:42 · 77 阅读 · 0 评论 -
134. 加油站
134. 加油站题目描述在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度...原创 2019-10-11 10:30:39 · 65 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素题目描述给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1示例 2:输入: root = [5,3...原创 2019-09-04 15:37:49 · 228 阅读 · 0 评论 -
242. 有效的字母异位词
242. 有效的字母异位词题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你...原创 2019-09-20 15:26:02 · 66 阅读 · 0 评论 -
62. 不同路径
62. 不同路径题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和 n 的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3...原创 2019-09-19 11:16:15 · 78 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素
378. 有序矩阵中第K小的元素题目描述给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。说明:你可以假设 k 的值永远是有效的, 1 ≤...原创 2019-09-18 20:13:01 · 143 阅读 · 0 评论 -
131. 分割回文串
131. 分割回文串题目描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]实现class Solution { public List<List<String>> partition(String s)...原创 2019-09-06 17:35:45 · 67 阅读 · 0 评论 -
48. 旋转图像
48. 旋转图像题目描述给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2],...原创 2019-09-05 20:32:18 · 64 阅读 · 0 评论 -
289. 生命游戏
289. 生命游戏题目描述根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两...原创 2019-09-04 17:32:52 · 185 阅读 · 1 评论 -
171. Excel表列序号
171. Excel表列序号题目描述给定一个Excel表格中的列名称,返回其相应的列序号。例如,A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...示例 1:输入: "A"输出: 1示例 2:输入: "AB"输出: 28示例 3:输入: "ZY"输出: 701思路先...原创 2019-09-04 16:07:56 · 246 阅读 · 0 评论 -
46. 全排列
46. 全排列题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路使用回溯算法,深度优先遍历+状态重置实现class Solution { public List<List&l...原创 2019-09-03 16:36:40 · 293 阅读 · 0 评论 -
22. 括号生成
22. 括号生成题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]实现class Solution { private List<String> res;...原创 2019-09-02 22:12:54 · 55 阅读 · 0 评论 -
78. 子集
78. 子集题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]实现class Solution { public List&l...原创 2019-09-01 18:39:56 · 63 阅读 · 0 评论 -
237. 删除链表中的节点
237. 删除链表中的节点题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 ...原创 2019-09-01 17:55:45 · 58 阅读 · 0 评论 -
238. 除自身以外数组的乘积
238. 除自身以外数组的乘积题目描述给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗...原创 2019-09-07 17:00:45 · 47 阅读 · 0 评论 -
148. 排序链表
148. 排序链表问题描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路使用自顶向下的归并排序实现/** ...原创 2019-09-10 19:43:56 · 83 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器题目描述给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组[1,8,6,2,5,4,8,3,7]。在此情...原创 2019-09-17 16:57:05 · 61 阅读 · 0 评论 -
215. 数组中的第K个最大元素
215. 数组中的第K个最大元素题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的...原创 2019-09-16 20:13:05 · 54 阅读 · 0 评论 -
191. 位1的个数
191. 位1的个数题目描述编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000...原创 2019-10-12 14:54:03 · 89 阅读 · 0 评论 -
13. 罗马数字转整数
13. 罗马数字转整数题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写...原创 2019-09-13 21:56:34 · 441 阅读 · 0 评论 -
169. 求众数
169. 求众数题目描述给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2实现class Solution { public int majorityElement(...原创 2019-09-13 16:38:25 · 141 阅读 · 0 评论 -
341. 扁平化嵌套列表迭代器
341. 扁平化嵌套列表迭代器题目描述给定一个嵌套的整型列表。设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的项或者为一个整数,或者是另一个列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回false,next 返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输...原创 2019-09-13 15:45:41 · 89 阅读 · 0 评论 -
412. Fizz Buzz
412. Fizz Buzz题目描述写一个程序,输出从 1 到 n 数字的字符串表示。如果 n 是3的倍数,输出“Fizz”;如果 n 是5的倍数,输出“Buzz”;如果 n 同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回:[ "1", "2", "Fizz", "4", "Buzz", ...原创 2019-09-12 16:24:12 · 92 阅读 · 0 评论