LeetCode刷题
alan_gaohaodong
加油!
展开
-
对称二叉树(剑指offer第28题)
一、问题描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3示例 1:输入:root = [1,2,2,3,4,4,3]输...原创 2020-10-16 15:31:45 · 258 阅读 · 0 评论 -
树的子结构(剑指offer第十七题)
一、题目描述输入两棵二叉树A,B,判断B是不是A的子结构。 (ps:我们约定空树不是任意一个树的子结构)二、解题思路非完全二叉树的规律难寻,一般的通用方法是递归求解。大致思路是:先判断A的根节点和B的根节点是否相同; 如果相同,再判断A的左右子节点和B的左右子节点是否相同; 如果相同则将...原创 2018-08-30 21:51:03 · 154 阅读 · 0 评论 -
数值的整数次方(剑指offer第十二题)
一、题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。二、思路解析(1)常规思路:求次方的常规思路就是累积乘起来,所以可以用循环进行,但一定要注意特殊情况,保证程序的健壮性。(2)用快速幂思想:分情况...原创 2018-07-13 09:49:00 · 218 阅读 · 0 评论 -
机器人的运动范围(剑指offer第67题)
一、题目描述 * 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动, * 每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 * 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38), * 因为3+5+3+8 = 19。请...原创 2018-12-23 22:25:30 · 203 阅读 · 0 评论 -
矩阵中的路径(剑指offer第66题)
一、题目描述 * 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 * 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。 * 如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e * 这样的3 X 4 矩阵中包含一条字符串"b...原创 2018-12-23 21:19:58 · 212 阅读 · 1 评论 -
数组中重复的数字(剑指 Offer第3题)java实现
一、题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000二、解题思路这是一道简单题,思路很简单。解法一:使用哈希表,hashmap解法二:使用数组,由于题目限制了n的大小,..原创 2020-09-15 16:12:36 · 275 阅读 · 0 评论 -
移除链表元素(LeetCode203题)
一、题目描述:删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5二、解题思路这是一道简单题,没有什么最优解方法一:循环判断每个节点的值是否等于给定值val。方法二:递归求解,链表本质是递归的数据结构,化解为子问题求解。三、java代码只提供方法二的递归版本。class Solution { publ...原创 2020-08-21 09:24:33 · 279 阅读 · 0 评论 -
逆波兰表达式求值(LeetCode第150题)java实现
一、题目描述根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) =...原创 2020-01-07 16:58:14 · 564 阅读 · 0 评论 -
扁平化嵌套列表迭代器(LeetCode第341题)java实现
一、题目描述给定一个嵌套的整型列表。设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的项或者为一个整数,或者是另一个列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用next 直到hasNext 返回false,next返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输入: [1,[4,[...原创 2020-01-07 16:22:07 · 551 阅读 · 0 评论 -
基本计算器 II(LeetCode第227题)java实现
一、题目描述实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格。 整数除法仅保留整数部分。示例1:输入: "3+2*2"输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函...原创 2020-01-07 14:40:53 · 1375 阅读 · 0 评论 -
有序矩阵中第K小的元素(LeetCode第378题)java实现
一、题目描述给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,不是第k个元素。 而 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。 说明: 你可以假设 k 的值永远是有效的, 1 ≤ k ≤...原创 2020-01-03 14:49:26 · 456 阅读 · 0 评论 -
前 K 个高频元素(LeetCode第347题)java实现
一、题目描述给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) ,n...原创 2019-11-10 20:48:56 · 452 阅读 · 1 评论 -
数据流的中位数(LeetCode第295题)java实现
一、题目描述中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示...原创 2019-11-10 10:35:10 · 203 阅读 · 0 评论 -
数组中的第K个最大元素(LeetCode第215题)java实现
一、题目描述在未排序的数组中找到第 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-11-09 19:16:43 · 792 阅读 · 0 评论 -
最小栈(LeetCode第155题)java实现
一、题目描述设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。pop()-- 删除栈顶的元素。top()-- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack...原创 2019-11-07 22:11:37 · 431 阅读 · 0 评论 -
除自身以外数组的乘积(LeetCode第238题)java实现
一、题目描述给定长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂...原创 2019-11-07 21:15:06 · 304 阅读 · 0 评论 -
递增的三元子序列(LeetCode第334题)java实现
一、题目描述给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的i, j, k,且满足0 ≤ i < j < k ≤ n-1,使得arr[i] < arr[j] < arr[k] ,返回 true ;否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例...原创 2019-11-06 22:01:32 · 382 阅读 · 0 评论 -
两个数组的交集 II(LeetCode第350题)java实现
一、题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。进...原创 2019-11-06 16:22:18 · 372 阅读 · 0 评论 -
打乱数组(LeetCode第384题)java实现
一、题目描述打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。solution.shuffle();// 重设数组到它的初始状态[1...原创 2019-11-04 23:02:10 · 323 阅读 · 0 评论 -
移动零(LeetCode第283题)java实现
一、题目描述给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。二、解题思路1.先找到数组中第一个为0的元素的下标firstZero2.将firstZero的后一位不为0的元素nums[i]...原创 2019-11-04 22:01:02 · 361 阅读 · 2 评论 -
存在重复元素(LeetCode第217题)java实现
一、题目描述给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true二、解题思路这是一道简单...原创 2019-11-03 20:24:26 · 249 阅读 · 0 评论 -
旋转数组(LeetCode第189题)java实现
一、题目描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输...原创 2019-11-03 17:16:56 · 374 阅读 · 0 评论 -
乘积最大子序列(LeetCode第152题)java实现
一、题目描述给定一个整数数组 nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。二、解题思路标签:动态规划遍历数组时计算当前最大值,不断更...原创 2019-10-30 18:06:19 · 400 阅读 · 0 评论 -
反转字符串(LeetCode第344题)java实现
一、题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例...原创 2019-10-30 15:18:52 · 638 阅读 · 0 评论 -
字符串中的第一个唯一字符(LeetCode第387题)java实现
一、题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.注意事项:您可以假定该字符串只包含小写字母。二、解题思路该题为简单题,思路就是用 哈希表来记录每个字母出现的次数,然后找出第一次出现次数为1的字符就是第一个不重复的字符。...原创 2019-10-30 14:52:31 · 326 阅读 · 0 评论 -
有效的字母异位词(LeetCod第242题)java实现
一、题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法...原创 2019-10-30 14:10:25 · 417 阅读 · 0 评论 -
单词搜索 II (LeetCode第212题)java实现
一、题目描述给定一个二维网格board和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = ["oath","pea","eat","rain"] and board =...原创 2019-10-30 11:18:56 · 507 阅读 · 0 评论 -
实现 Trie (前缀树)(LeetCode第208题)java实现
一、题目描述实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWi...原创 2019-10-29 20:51:35 · 263 阅读 · 0 评论 -
单词拆分(LeetCode第139题)java实现
一、题目描述给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 ...原创 2019-10-29 14:21:42 · 572 阅读 · 0 评论 -
分割回文串(LeetCode第131题)java实现
一、题目描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入:"aab"输出:[ ["aa","b"], ["a","a","b"]] 二、解题思路用回溯法,进行dfs,即可。三、java代码class Solution { public List<List&...原创 2019-10-28 22:06:17 · 516 阅读 · 1 评论 -
验证回文串 (LeetCode第125题)java实现
一、题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false二、解释思路首尾指针向中间靠拢,(1)判断字符是否是数字或字...原创 2019-10-27 18:39:52 · 256 阅读 · 0 评论 -
合并两个有序数组(LeetCode第88题)java实现
一、题目描述给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存nums2中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = ...原创 2019-10-24 20:42:23 · 283 阅读 · 0 评论 -
搜索二维矩阵 II(LeetCode第240题)java实现
一、题目描述编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13,...原创 2019-10-22 22:53:49 · 281 阅读 · 0 评论 -
求众数(LeetCode第169题)java实现
一、题目描述给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2二、解题思路方法一:由于题目要求众数一定存在,所以,可以先排序,在求n/2中间的数即可。但是排序...原创 2019-10-22 21:46:17 · 269 阅读 · 0 评论 -
只出现一次的数字(LeetCode第136题)java 实现
一、题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4二、解释思路1、你的算法应该具有线性时间复杂度:只能用O(n)的复杂度;数组排...原创 2019-10-22 21:15:21 · 195 阅读 · 0 评论 -
LRU缓存机制(LeetCode第146题)java实现
一、题目描述运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据get和 写入数据put。获取数据get(key)- 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据put(key, value)- 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删...原创 2019-10-13 21:56:44 · 396 阅读 · 0 评论 -
俄罗斯套娃信封问题(LeetCode第354题)java实现
一、题目描述给定一些标记了宽度和高度的信封,宽度和高度以整数对形式(w, h)出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],...原创 2019-10-13 20:46:43 · 651 阅读 · 0 评论 -
翻转字符串里的单词(java) LeetCode第151题
一、题目描述给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good ...原创 2019-07-04 14:12:11 · 1037 阅读 · 0 评论 -
最长连续序列(java)LeetCode第128题
一、题目描述给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。二、解题思路由于O(n)时间复杂度的限制,我们就不能采取先排序后遍历的思路。针对O(n)时间复杂度的实现思路:遍历nums[]数组,利用M...原创 2019-07-10 10:44:51 · 1497 阅读 · 0 评论 -
简化路径(java)LeetCode第71题
一、题目描述:以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠/开头,并且两个...原创 2019-07-04 17:28:09 · 642 阅读 · 1 评论