leetcode
天才是从醒悟开始的
目标+努力+坚持
展开
-
leetcode.102 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路:利用队列的先进先出的规则,让每一层的节点先进入,然后要出队时,再把他的左右节点加入队列的末尾,以此类推。/** * Definition for a b...转载 2020-11-02 10:49:45 · 153 阅读 · 0 评论 -
leetcode 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 ...原创 2018-09-21 10:55:31 · 239 阅读 · 0 评论 -
leetcode.234 回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路一:可以遍历链表将值存入数组中,然后再在数组从前后进行回文判断。/** * Definition for singly-linked list. * struct ListNode { * int val; * st.原创 2020-10-26 20:15:52 · 67 阅读 · 0 评论 -
leetcode21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:利用归并排序的思想,循环遍历两个链表,如果遍历到的第一个链表的值小于第二个链表的值,那么将小的链表结点加入新的链表即可,反之如果比第二个链表的结点大...原创 2018-09-15 10:14:15 · 114 阅读 · 0 评论 -
leetcode 237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之...原创 2018-09-12 12:39:52 · 255 阅读 · 0 评论 -
leetcode28. 实现strStr()
实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needl...原创 2018-09-09 11:07:19 · 266 阅读 · 0 评论 -
leetcode 242. 有效的字母异位词
定两个字符串s和t,编写一个函数来判断t是否是s的一个字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应...原创 2018-09-06 19:42:36 · 106 阅读 · 0 评论 -
leetcode387. 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.注意事项:您可以假定该字符串只包含小写字母。思路:首先要考虑的情况是传进来的字符串空的情况,接着在考虑利用字符在数组的位置,统计相加的结果,最后返回数组值为1的循环值,如果没有找到也要返回...原创 2018-09-05 10:40:28 · 355 阅读 · 0 评论 -
leetcode 7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路:由于负数取余还是带负号的,所以不用单独讨论负数的情况了,由于判断用例可能导致结果溢出,超出 int 所能表...转载 2020-10-11 11:21:06 · 65 阅读 · 0 评论 -
leetcode.26 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:...原创 2020-02-21 20:15:37 · 86 阅读 · 0 评论 -
leetcode.69 x 的平方根
实现int sqrt(int x)函数。计算并返回x的平方根,其中x是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路一:狼狈的调包侠,直接调用原有的库函数:Mat...原创 2019-03-08 09:55:10 · 104 阅读 · 0 评论 -
数据结构篇——队列
队列的特点:先入先出,就好像饭堂排队打饭的排的队一样,排第一的先拿到饭去打菜,跑得快,拿第一有饭吃,跑得慢。。。。操作:插入,在队尾插入元素,就好像在饭堂打饭需要按序排队。 删除,删除队首的元素,就好像在饭堂拿到饭的人,不能老是在第一站着位置。实现:class Queue{ List<Integer> list; int ...原创 2019-03-16 00:46:13 · 175 阅读 · 0 评论 -
leetcode.279 完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.思路: 感觉算是一道动态规划题,可以利用自下向上的备忘录方法进行解答,创建一个长度为 n 的...原创 2019-03-20 09:53:52 · 159 阅读 · 0 评论 -
leetcode.50 Pow(x, n)
实现pow(x,n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 <x< 10...原创 2019-03-07 10:28:04 · 111 阅读 · 0 评论 -
leetcode.621 任务调度器
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计...原创 2019-03-14 11:18:35 · 717 阅读 · 0 评论 -
leetcode.50 逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: ((2 + 1) * 3) = 9示例 2:...原创 2019-03-13 23:54:06 · 82 阅读 · 0 评论 -
leetcode.29 两数相除
给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数dividend除以除数divisor得到的商。示例1:输入: dividend = 10, divisor = 3输出: 3示例2:输入: dividend = 7, divisor = -3输出: -2说明:被除数和除数均...转载 2019-03-09 11:17:05 · 104 阅读 · 0 评论 -
leetcode.380 常数时间插入、删除和获取随机元素
设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。 remove(val):元素 val 存在时,从集合中移除该项。 getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。示例 :// 初始化一个空的集合。RandomizedSet randomSet = new Ra...原创 2019-03-06 12:42:41 · 410 阅读 · 0 评论 -
leetcode.300 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为O(n2) 。进阶:你能将算法的时间复杂度降低到O(nlogn) 吗?思路一...原创 2019-03-03 10:55:57 · 107 阅读 · 0 评论 -
leetcode.62 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:...原创 2019-02-26 11:04:01 · 122 阅读 · 0 评论 -
leetcode.55 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的...转载 2019-03-01 12:49:33 · 116 阅读 · 0 评论 -
leetcode.240 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 1...原创 2019-02-25 12:47:00 · 155 阅读 · 0 评论 -
leetcode.46 全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:使用回溯算法进行全排列,使用算套路吧,有存储全部结果的 List<List<Integer>> 类型的 lists,还有排列的下标...原创 2019-02-13 11:00:11 · 114 阅读 · 0 评论 -
leetcode.33 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2...原创 2019-02-23 10:38:28 · 79 阅读 · 0 评论 -
leetcode.166 分数到小数
给定两个整数,分别表示分数的分子numerator 和分母 denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。示例 1:输入: numerator = 1, denominator = 2输出: "0.5"示例2:输入: numerator = 2, denominator = 1输出: "2"示例3:输入...原创 2019-03-11 23:55:38 · 317 阅读 · 0 评论 -
leetcode.169 求众数
给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2思路:用 map 保存每一个数和每一个数出现的次数的映射,再遍历这个 map 判断比 n/2 的次数取出来即可。代...原创 2019-03-12 23:33:55 · 81 阅读 · 0 评论 -
leetcode.494 目标和
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 ...原创 2019-03-25 10:02:25 · 108 阅读 · 0 评论 -
leetcode 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 提示:...原创 2018-11-11 12:23:33 · 532 阅读 · 0 评论 -
leetcode.498 对角线遍历
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。示例:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]解释:说明:给定矩阵中的元素总数不会超过 100000 。思路:设置一个标志位来控制方向...转载 2019-04-20 12:48:34 · 234 阅读 · 0 评论 -
暴力字符串查找算法
给定一个模式串 pat 和一个主串 txt,寻找模式串 pat 在主串txt中的下标位置。public class Solution { public static void main(String[] args) { System.out.println(find("aba","abbaba")); // 返回的结果为 3 } public sta...原创 2019-04-21 20:51:09 · 252 阅读 · 0 评论 -
最长重复子串 「java 实现」
给定一个字符串,寻找其最长重复子串,例如「abbaba」最长重复子串为 ab。思路:由于最长重复子串的长度,不超过原字符串的长度的一半,所以从字符串的一半开始计算,将源字符串分为两部分,左边一部分为样品 sample,右边一部分为寻找子串left,如果左边寻找子串包含了 left ,那么将返回这个最长重复子串。public static String longestRepeatingSu...转载 2019-04-21 20:37:27 · 2097 阅读 · 2 评论 -
leetcode.724 寻找数组的中心索引
给定一个整数类型的数组nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入: nums = [1, 7, 3, 6, 5, 6]输出: 3解释: 索引3 (nu...转载 2019-04-09 12:04:28 · 115 阅读 · 0 评论 -
leetcode.747 至少是其他数字两倍的最大数
在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的索引,否则返回-1。示例 1:输入: nums = [3, 6, 1, 0]输出: 1解释: 6是最大的整数, 对于数组中的其他整数,6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.示例 2:输入: nums = [1,...原创 2019-04-11 23:12:52 · 138 阅读 · 0 评论 -
leetcode.133 克隆图
给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值val(Int) 和其邻居的列表(list[Node])。示例:输入:{"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","neig...转载 2019-03-28 10:57:25 · 286 阅读 · 0 评论 -
leetcode.542 01矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。 给定...转载 2019-04-06 10:31:08 · 578 阅读 · 0 评论 -
LeetCode-394. Decode String (JAVA)解码字符串
394. Decode StringGiven an encoded string, return it's decoded string.The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times....转载 2019-03-30 11:49:25 · 309 阅读 · 0 评论 -
leetcode.841 钥匙和房间
有N个房间,开始时你位于0号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间i都有一个钥匙列表rooms[i],每个钥匙rooms[i][j]由[0,1,...,N-1]中的一个整数表示,其中N = rooms.length。 钥匙rooms[i][j] = v可以打开编号为v的房间。...原创 2019-04-08 19:55:27 · 258 阅读 · 0 评论 -
leetcode.232 用栈实现队列
使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1qu...原创 2018-12-22 14:17:10 · 99 阅读 · 0 评论 -
leetcode.225 用队列实现栈
使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back,peek/pop from front,size, 和is empty这些操作是合法的。 你所使用的语言也许不支持队列。你可以使用 lis...原创 2019-03-29 20:28:03 · 109 阅读 · 0 评论 -
leetcode.752 打开转盘锁
你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数...转载 2019-03-21 21:04:24 · 523 阅读 · 0 评论