![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leedcode刷题
凤梨No.1
这个作者很懒,什么都没留下…
展开
-
Leetcode416.分割等和子集(01背包问题)
416.分割等和子集题目方法一——动态规划(01背包问题)方法二——背包问题(空间复杂度将为O(n))题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等原创 2020-07-18 15:59:38 · 224 阅读 · 1 评论 -
Leetcode206.反转链表
206.反转链表题目方法一——暴力解法方法二——迭代方法方法三——递归题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?方法一——暴力解法建立一个新链表,新链表是采用头插法建立的。时间复杂度与空间复杂度都是O(n)public class ReverseList {//Definition原创 2020-07-17 16:47:35 · 121 阅读 · 0 评论 -
Leetcode997:找到小镇的法官
997:找到小镇的法官题目思路一思路二题目在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足属性 1 和属性 2 。给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。示例 1:输原创 2020-06-17 16:48:08 · 111 阅读 · 0 评论 -
Leetcode110.平衡二叉树
110:平衡二叉树题目思路一——暴力思路二题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例:给定二叉树 [3,9,20,null,null,15,7],3/ \9 20 / \ 15 7返回true。思路一——暴力通过调用函数分别求解左右子树的最大深度,然后求解其高度绝对差值,如果不满足条件,返回fal原创 2020-06-16 17:09:52 · 96 阅读 · 0 评论 -
Leetcode104.二叉树的最大深度
104.二叉树的最大深度思路一——递归与分治思路二——广度优先搜索思路一——递归与分治递归终止条件:当前是否为空,是返回0;当前结点左右子树是否为空,是返回1;分解:递归求左/右子树最大深度合并:如果左右子树存在任一子树深度为0,或者都为0,返回两个值之和并+1;否则,返回其中最大值+1;/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode lef原创 2020-06-16 16:09:42 · 77 阅读 · 0 评论 -
Leetcode111.二叉树的最小深度
111:二叉树的最小深度题目思路一——递归思路二——深度优先搜索思路三——广度优先搜索题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ \9 20 / \ 15 7返回它的最小深度 2.思路一——递归本题有一个关键点是题目是指根节点到叶子结点的最小原创 2020-06-16 15:37:35 · 170 阅读 · 0 评论 -
数据结构之递归法和分治法
递归法和分治法一、递归与堆栈二、基于归纳的递归三、递推关系求解四、分治法1、基本思想五、例题一、递归例题简单例题中等例题困难例题二、分治例题简单例题中等例题困难例题一、递归与堆栈1、递归(recursion)是指在定义自身的同时又出现了对自身的引用。如果一个算法直接或间接地调用自己,则称这个算法是一个递归算法。2、递归由两部分组成:递归调用与递归终止条件3、递归解决的应用问题:(1) 问题本身的定义就是递归,比如斐波那契数列、xn;(2)问题本身虽然不是递归定义,但是它所用到的数据结构是递归,比原创 2020-06-15 20:38:23 · 505 阅读 · 0 评论 -
剑指Offer面试题39. 数组中出现次数超过一半的数字
面试题39. 数组中出现次数超过一半的数字题目思路一思路二思路三题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000思路一利用HashMap存储数组值及存在的次数。由于一个数组中有且仅有一个数字超过数组长度的一半,利用该特性不必遍历所有元素:1、先判断该元素是否在哈希表中,存原创 2020-06-15 20:33:32 · 88 阅读 · 0 评论 -
Leetcode894:所有可能的满二叉树
894: 所有可能的满二叉树题目思路一——递归题目满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,nul原创 2020-06-14 21:55:43 · 122 阅读 · 0 评论 -
剑指Offer面试题16:数值的整数次方
面试题16:数值的整数次方题目思路一——二分法题目实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 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原创 2020-06-14 20:18:41 · 120 阅读 · 0 评论 -
Leetcode面试题16.11:跳水板
面试题16.11:跳水板题目思路一——暴力题目你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。示例:输入:shorter = 1longer = 2k = 3输出: {3,4,5,6}提示:0 < shorter <= longer0 <= k <= 100000思路一——暴力由于需要原创 2020-06-14 16:56:14 · 169 阅读 · 0 评论 -
Leetcode938.二叉搜索树的范围和
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提示:树中的结点数量最多为 10000 个。最终的答案保证小于 2^3原创 2020-06-14 15:42:39 · 160 阅读 · 0 评论 -
面试题08.06:汉诺塔问题
面试题08.06:汉诺塔问题题目思路一题目在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1:输入:A = [2, 1, 0], B = [],原创 2020-06-11 21:36:40 · 167 阅读 · 0 评论 -
Leetcode20:有效的括号
20:有效的括号题目思路一思路二题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{原创 2020-06-11 20:26:00 · 62 阅读 · 0 评论 -
剑指Offer面试题09:用两个栈实现队列
面试题09:用两个栈实现队列题目思路一(栈是线性表的顺序存储)思路二(栈是线性表的链式存储)题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]原创 2020-06-11 16:52:29 · 218 阅读 · 0 评论 -
Leetcode90子集II
90子集II题目方案一题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], [] ]方案一思路: 主要是参照子集I解答,采用递归回溯法。重点在于如何去除重复的子集合。class Solution { public List<List<Integer>> subsetsWithDup原创 2020-06-10 16:12:40 · 103 阅读 · 0 评论 -
数据结构之数组
数组数组基本知识点知识点一——简介知识点二——for each循环知识点三——数组初始化及匿名数组知识点四——数组拷贝知识点五——命令行参数知识点六——数组排序知识点七——多维数组数组类型例题——leedcode例题一——面试题03:数组中重复的数字数组基本知识点知识点一——简介数组占据一块连续的内存并按照顺序存储数据,并且再创建数组时指定数组的容量大小。数组读/写时间复杂度为O(1)。数组变量声明,需要指明数组元素类型和数组变量的名字(仅仅是声明并没有初始化为一个真正的数组):in原创 2020-06-10 15:14:09 · 178 阅读 · 0 评论 -
数据结构之字符串
字符串字符串基本知识点知识点一——简介字符串基本知识点知识点一——简介java字符串就是Unicode字符序列。java本没有内置的字符串,而是在标准Java类提供了一个预定义类String。示例:String e = “”; String greeting = “Hello”;String类没有提供用于修改的字符串方法,如果需要修改,可以使用拼接:示例:greeting = greeting.substring(0, 3) + “p!”;此处称String类对象为不可变字原创 2020-06-10 15:13:09 · 122 阅读 · 0 评论 -
数据结构之链表
链表一、单链表二、双向链表三、数组与链式存储的线性表对比1、基于时间比较1、查找2、插入与删除2、基于空间比较四、例题1、简单例题2、中等例题3、困难例题链表是线性表的一种链式存储,即用指针将存储线性表中数据元素的那些单元依次串联在一起。一、单链表链表是一系列的存储数据元素的单元通过指针串接起来形成的,因此每个单元至少有两个域,一个域用于数据元素的存储,另一个域是指向其他单元的指针。这里具有一个数据域和多个指针域的存储单元通常称为结点(node)。在 Java 中没有显式的指针类型,然而实际上对原创 2020-06-10 15:10:40 · 96 阅读 · 0 评论 -
Leetcode647.回文子串
647:回文子串题目思路一思路二题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: “abc”输出: 3解释: 三个回文子串: “a”, “b”, “c”.示例 2:输入: “aaa”输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.注意:输入的字符串长度不会超过1000。思路一该题是最长回文字符串的变体。原创 2020-06-10 09:41:09 · 130 阅读 · 0 评论 -
Leetcode5.最长回文子串
5:最长回文子串题目思路一思路二题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路一这道题可以采用动态规划的方法,设置dp[i][j]表示字符串s(i....j)是否为回文子串,关键点在于:初始条件:dp[i][i] = true;状态转移方程:s[i] == s[j]为false,则其必然原创 2020-06-09 22:24:34 · 146 阅读 · 0 评论 -
Leetcode34. 在排序数组中查找元素的第一个和最后一个位置
34:在排序数组中查找元素的第一个和最后一个位置题目思路一思路二题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1原创 2020-06-08 19:09:02 · 158 阅读 · 0 评论 -
Leetcode817.链表组件
817:链表组件题目思路题目给定一个链表(链表结点包含一个整型值)的头结点 head。同时给定列表 G,该列表是上述链表中整型值的一个子集。返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。示例 1:输入:head: 0->1->2->3G = [0, 1, 3]输出: 2解释:链表中,0 和 1 是相连接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一个组件,同理 [3] 也是一个组件,故返回 2原创 2020-06-08 15:36:40 · 84 阅读 · 0 评论 -
Leetcode1367.二叉树中的列表
1367:二叉树中的列表题目思路一思路二题目给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。示例 1:输入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,nu原创 2020-06-08 13:44:30 · 178 阅读 · 0 评论 -
Leetcode82删除排序链表的重复元素II
82:删除排序链表的重复元素II题目思路一思路二题目给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3思路一定义一个头结点,在处理链表前几个结点值相等时更方便;若该结点值与下一个结点值不相等时,将该结点加入返回链表中;若该结点原创 2020-06-07 19:55:58 · 107 阅读 · 0 评论 -
Leetcode83删除排序链表中的重复元素
83:删除排序链表中的重复元素题目思路一思路二思路三题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路一利用set不能存储相同元素特性,如果set添加成功就继续,否则就删除该结点。/** * Definition for singly-linked list. * public class原创 2020-06-07 15:18:02 · 90 阅读 · 0 评论 -
Leetcode234.回文链表
234.回文链表题目思路一思路二题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路一将链表的值依次存入列表中再利用双指针法比较是否首尾对应位置的元素值是否相等。/** * Definition for singly-linked list. * public class ListNode {原创 2020-06-07 14:29:53 · 80 阅读 · 0 评论 -
剑指Offer面试题06从头到尾打印链表
面试题06:从头到尾打印链表题目思路一思路二思路三题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路一利用栈先进后出的特点,依次push()链表的值,然后再依次从栈中pop()取值存进返回数组中。/** * Definition for singly-linked list. * public class ListNode { *原创 2020-06-05 14:47:18 · 93 阅读 · 0 评论 -
剑指Offer面试题53查找数字
面试题53——I与II题目I——在排序数组种查找数字思路一思路二思路三——二分法题目II——0~n-1种缺失的数字思路一思路二——二分法题目I——在排序数组种查找数字统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000思路一利用双指针解决该题,分别找到重复原创 2020-06-02 11:09:22 · 237 阅读 · 0 评论 -
Leetcode606根据二叉树创建字符串
606.根据二叉树创建字符串题目思路一思路二题目你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4]1/ \2 3/4输出: “1(2(4))(3)”解释: 原本将是“1(2(4)())(3())”,在你省略所有不必要的空括号对之后,它将是“1(2(4))(3)”。示例 2:输入:原创 2020-06-01 16:06:05 · 77 阅读 · 0 评论 -
Leetcode58最后一个单词的长度
58.最后一个单词的长度思路一思路二题目给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: “Hello World”输出: 5思路一正序遍历,总的来说分伪三类情况:‘a’ ,’ ‘, ‘b’ 与’ ', ‘b’:重置ret=0;‘a’ ,’ ',:不需要重置,继续即可;原创 2020-06-01 11:59:40 · 96 阅读 · 0 评论 -
剑指Offer面试题5替换空格
面试5.替换空格题目思路一思路二题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000思路一暴力解答:构建一个长度为s.length()*3的数组,一个字符一个字符比较,如果为空字符,则数组依次增加’%’‘2’'0’三个字符,再继续比较其他的字符。最后再构建一个以替换成功的字符数组为元素的字符串。class Solut原创 2020-06-01 10:52:27 · 77 阅读 · 0 评论 -
Leetcode121买卖股票的最佳时机
121买卖股票的最佳时机题目思路一:暴力解答思路二题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价原创 2020-05-30 09:50:59 · 80 阅读 · 0 评论 -
剑指Offer面试题4二维数组中的查找
面试题4.二维数组中的查找题目思路一思路二题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例: 现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 t原创 2020-05-29 17:17:50 · 149 阅读 · 0 评论 -
剑指offer面试题3数组中重复数字
面试题3.数组中重复数字题目思路一思路二思路三题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000思路一利用Arrays.sort()对数组进行排序,再比较两个相邻元素是否相等,如果相等就返回该元素,否则继原创 2020-05-29 15:47:27 · 172 阅读 · 0 评论 -
Leetcode78子集
78子集题目方案一题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[],[1,3],[2,3], [1,2]]方案一思路: 通过递归调用函数返回子集,也包含了深度优先算法。class Solution { public List<List<Integer>> subsets(int[] nums)原创 2020-06-10 16:10:40 · 105 阅读 · 0 评论 -
Leetcode28实现strStr()
@TOC题目实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1: 输入: haystack = “hello”, needle = “ll” 输出: 2示例 2: 输入: haystack原创 2020-05-28 17:14:02 · 61 阅读 · 0 评论 -
647.回文子串
647回文子串题目思路代码题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1: 输入: “abc” 输出: 3解释: 三个回文子串: “a”, “b”, “c”.示例 2: 输入: “aaa” 输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.注意:输入的字符串长度不会超过1000。思路求解回文子串数可以利用动态规划的原创 2020-05-27 16:48:45 · 114 阅读 · 0 评论