![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 65
骑驴等花K
我是一条孤独的鱼儿
展开
-
leetcode436. 寻找右区间
题目来源:力扣题目给你一个区间数组 intervals ,其中intervals[i] = [starti, endi] ,且每个starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj>= endi ,且 startj 最小化 。返回一个由每个区间 i 的 右侧区间 在intervals 中对应下标组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。示例 1:输入:interva...原创 2022-05-22 11:49:34 · 147 阅读 · 0 评论 -
leetcode14最长公共前缀
题目来源:题目题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。思路思路一(横向比较) 求得两个字符串的公共前缀,由于它们所有的公共前缀也是...原创 2020-08-01 15:42:48 · 147 阅读 · 0 评论 -
leetcode7.整数反转
题目:题目题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路本题可以分解保存每一位的数字,再把每一位的数字按照它的位数...原创 2020-08-01 14:17:47 · 144 阅读 · 0 评论 -
leetcode20.有效的括号
题目来源:题目题目给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出:...原创 2020-08-01 09:50:37 · 101 阅读 · 0 评论 -
leetcode739. 每日温度
题目来源:题目题目根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。思路思路一...原创 2020-06-11 17:07:24 · 97 阅读 · 0 评论 -
leetcode2两数相加
题目来源:题目题目给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807...原创 2020-06-11 15:45:38 · 141 阅读 · 0 评论 -
leecode1.两数之和
题目来源:题目题目给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路思路一(暴力算法)循环遍历两次数组,分别在数组中找每个...原创 2020-06-11 15:14:19 · 120 阅读 · 0 评论 -
leetcode101. 对称二叉树
题目来源:题目题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[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进阶:你可以运用递归和迭代两种方法解决这个问题吗?思路思路一(...原创 2020-05-31 23:33:48 · 126 阅读 · 0 评论 -
leetcode84. 柱状图中最大的矩形
题目来源:题目题目给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10思路思路一(遍历+中心扩展)我们可以遍历每个柱形,向左右两个方向遍历...原创 2020-05-30 11:45:35 · 110 阅读 · 0 评论 -
leetcode198. 打家劫舍
题目来源:题目题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最...原创 2020-05-30 09:36:29 · 89 阅读 · 0 评论 -
leetcode974. 和可被 K 整除的子数组
题目来源:题目题目给定一个整数数组 A,返回其中元素之和可被 K整除的(连续、非空)子数组的数目。示例:输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]提示:1 <= A.length <=...原创 2020-05-27 09:44:59 · 249 阅读 · 0 评论 -
leetcode4. 寻找两个正序数组的中位数
题目来源:题目参考题解:题解题目给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数...原创 2020-05-25 01:38:57 · 106 阅读 · 0 评论 -
leetcode5. 最长回文子串
题目来源:题目题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路思路一(暴力解法) 找到所有的字串,利用头尾指针的方式判断每个字串是否为回文串。使用头尾指针判断字串是否为回文串的时间复杂度为O(n).找每个字串的时间复杂度为O(n^2).所以总的时间复杂...原创 2020-05-22 00:06:26 · 133 阅读 · 0 评论 -
leetcode1371. 每个元音包含偶数次的最长子字符串
题目来源:题目题目给你一个字符串s,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即'a','e','i','o','u' ,在子字符串中都恰好出现了偶数次。示例 1:输入:s = "eleetminicoworoep"输出:13解释:最长子字符串是 "leetminicowor" ,它包含 e,i,o各 2 个,以及 0 个 a,u 。示例 2:输入:s = "leetcodeisgreat"输出:5解释:最长子字符串是 "lee...原创 2020-05-20 12:01:03 · 425 阅读 · 0 评论 -
leetcode680. 验证回文字符串 Ⅱ
题目来源:题目题目给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。思路思路一(暴力算法)判断一个字符串是不是回文串,可以使用头尾两个指针来判断。 首先判断原字符串是否为回文串,然后分别判断删除每一个位置之后的...原创 2020-05-19 13:37:21 · 157 阅读 · 0 评论 -
广度优先搜索(bfs)
概念 与树的遍历类似,我们希望从图的某一顶点出发访遍图中其余节点,并且使每一个顶点仅被访问一次。这个过程就叫做图的遍历。 由于图的连接可能存在环路,沿着边依次访问的过程可能会使得某个顶点被访问多次,所以可以使用辅助数组visited[0…n-1]记录某个顶点是否已经被访问。它的初始值可以是false,如果某个顶点i被访问过了,就将visited[i]置为true. 广度优先遍历类似于树的层次遍历,假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾被...原创 2020-05-17 17:54:07 · 274 阅读 · 0 评论 -
深度优先搜索(dfs)
概念 与树的遍历类似,我们希望从图的某一顶点出发访遍图中其余节点,并且使每一个顶点仅被访问一次。这个过程就叫做图的遍历。 由于图的连接可能存在环路,沿着边依次访问的过程可能会使得某个顶点被访问多次,所以可以使用辅助数组visited[0…n-1]记录某个顶点是否已经被访问。它的初始值可以是false,如果某个顶点i被访问过了,就将visited[i]置为true. 深度优先遍历类似于先根遍历,从某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发继续...原创 2020-05-17 17:18:05 · 283 阅读 · 0 评论 -
leetcode25.K个一组翻转链表
题目来源:题目题目给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5...原创 2020-05-16 15:51:20 · 82 阅读 · 0 评论 -
leetcode560.和为K的子数组
题目来源:题目题目给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。思路思路一(枚举)计算每个以下标j结尾的子数组和,判断该子数组的和是否为k。下标...原创 2020-05-15 09:59:53 · 187 阅读 · 0 评论 -
leetcode255.最小栈
题目来源:题目题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[]...原创 2020-05-15 00:38:17 · 157 阅读 · 0 评论 -
leetcode236.二叉树的最近公共祖先
题目来源:题目题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p =...原创 2020-05-10 11:15:21 · 80 阅读 · 0 评论 -
leetcode69.x的平方根
题目来源:题目题目实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路(二分查找) X的平方根一定在[0,x]的区间里,所以要找到x的平方根只需在该区间里查...原创 2020-05-09 14:22:56 · 90 阅读 · 0 评论 -
leetcode221.最大正方形
题目来源:题目题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4思路思路一(暴力搜索)遍历整个二维数组,如果遇到字符为‘1’的元素,计算以它为正方形左上角元素的最大正方形面积。首先要知道以该元...原创 2020-05-08 11:45:35 · 123 阅读 · 0 评论 -
leetcode572.另一颗树的子树
题目来源:题目题目给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \1 2给定的树 t: 4 / \1 2...原创 2020-05-07 17:51:48 · 66 阅读 · 0 评论 -
leetcode983.最低票价
链接:题目题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为days的数组给出。每一项是一个从1到365的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为costs[0] 美元;一张为期七天的通行证售价为costs[1] 美元;一张为期三十天的通行证售价为costs[2] 美...原创 2020-05-06 18:54:29 · 97 阅读 · 0 评论 -
跳跃游戏2
题目(本题是立扣上的一道题目)给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步...原创 2020-05-04 11:14:51 · 105 阅读 · 0 评论 -
B树和B+树
一个好用的在线画数据结构和算法图的网址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.htmlB树的性质一个m阶的b树有如下的性质(m阶意味该树的某个节点最多有m个孩子)1.根节点至少有两个孩子。2.中间节点至少有ceil(m/2)个孩子,最多有m个孩子。3.叶子节点有k-1个元素。其中m/2<=k...原创 2020-03-27 12:52:52 · 166 阅读 · 0 评论 -
AVL树的介绍
AVL树的特点Avl树是二叉平衡查找树,所谓平衡二叉树,即该二叉树中所有节点的左子树和右子树的高度差小于等于1。树的高度就是从树的根节点到叶子节点最长的路径。所谓二叉查找树,即该二叉树的每个节点,该节点的右子树所有节点都大于等于该节点,该节点的左子树的所有节点都小于该节点。AVL树的插入对于一个给定的AVL树,按照每个节点的大小插入一个节点后,可能会破坏AVL树的结构。这时需要对二叉树...原创 2020-03-18 18:37:47 · 1262 阅读 · 0 评论 -
二叉树的递归和非递归遍历算法
二叉树的结构class TreeNode{ public int data; public TreeNode left; public TreeNode right; public TreeNode(int n){ data = n; left = null; right = null; ...原创 2020-03-13 23:29:46 · 62 阅读 · 0 评论 -
各种排序算法实现及其比较
各种常用排序算法比较 类别 排序方法 时间复杂度 空间复杂度 ...原创 2020-03-12 15:28:43 · 90 阅读 · 0 评论 -
构建乘积数组
题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]*A[i]*A[i-1]*A[i+1]*…*A[n-1]。不能使用除法。思路思路一使用暴力算法,每一位按照题目给出的公式计算,时间复杂度为O(n^2).思路二根据题目,定义C[i] = A[0]*A[1]*…*A[i-1];定义D[i] = A[i+1]*A...原创 2020-02-19 23:48:36 · 66 阅读 · 0 评论 -
不用加减乘除做加法
题目写一个函数,求两个整数之和,要求在函数体内不得使用‘+’,‘-’,‘*’,‘/’四则运算符号。思路考虑用位运算。先算每一位的计算结果。用异或来计算。再算每一位计算的进位结果。用与运算来计算。把进位结果左移一位。再循环把计算结果和进位结果“加”起来。代码public static int add(int num1,int num2){ int sum...原创 2020-02-19 23:32:50 · 53 阅读 · 0 评论 -
股票的最大利润
题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}.如果我们在价格为5的时候买入并在价格为16的时候卖出,则能收获最大的利润11.思路思路一本题实质是求最大的数值对差值。遍历所有数值对所用的时间复杂度为O(n^2).思路二用函数F(i)来表示...原创 2020-02-19 23:24:05 · 91 阅读 · 0 评论 -
圆圈中最后剩下的数字
题目0,1,2,……,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。思路思路一根据这个问题的描述,可以选用环形链表来保存数据,然后按照题目描述来操作。至于环形链表,可以用java中的List来代替。设置一个指针,当指针的值等于list的长度时,就设置指针指向列表的开头。思路二用数学方法推导出迭代关系。用...原创 2020-02-19 22:23:22 · 95 阅读 · 0 评论 -
扑克牌中的顺子
题目从扑克牌中随机抽5张牌,判断是不是一个顺子。即这5张牌是不是连续的。2-10为数字本身。A为1,J为11,Q为12,K为13.二大小王可以看成任何数字。思路把大小王看成0.第一步,将这5个数排序。第二步,统计大小王(0)的个数。第三步,统计空缺的个数。第四步,通过比较大小王的个数与空缺的个数判断是否为顺子。代码public static boolean i...原创 2020-02-19 20:41:45 · 2054 阅读 · 0 评论 -
N个骰子的点数
题目把n个骰子仍在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所以可能的值出现的概率。(骰子有六个面)思路N个骰子最小的点数为n,最大的点数为6n,一共有6n-n+1种可能。总的可能的次数为6^n思路一基于递归的思路把n个骰子分为1个和n-1个,对于一个骰子来说,它有1-6六种可能。然后把n-1个骰子在分为1个和n-1个,这一个也有六中可...原创 2020-02-19 19:48:51 · 125 阅读 · 0 评论 -
滑动窗口的最大值
题目给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如输入数组{2,3,4,2,6,2,5,1}及滑动窗口大小3输出最大值{4,4,6,6,6,5}思路思路一遍历所有的滑动窗口,找出其中的最大值。在滑动窗口找最大值的时间复杂度为O(k)遍历所有的滑动窗口时间复杂度为O(n)总的时间复杂度为O(nk)思路二由于滑动窗口的插入和删除符合先进...原创 2020-02-18 01:59:37 · 100 阅读 · 0 评论 -
和为S的连续正数序列
题目输入一个正数S,打印出所有和为S的连续正数序列(至少含有两个数).例如输入15输出1-5,4-6,7-8思路思路一暴力解法,从一开始,增大尾指针的值。如果和大于S的话,在增大头指针的值重新循环。时间复杂度为O(n^2)思路二依然用头尾两个指针来表示开始的数字和结尾。不同的是尾指针的值只增大不缩小。如果序列的和小于S,增大尾指针,序列的和大于S,增大头指...原创 2020-02-17 00:16:50 · 83 阅读 · 0 评论 -
和为S的两个数字
题目数组一个递增排序的数组和一个数字S,在数组中查找两个数字,使得他们的和正好是S.如果有多组数的和等于S。任意输出一组。例如输入{1,2,4,7,11,15}和15可以输出4,11思路思路一选定一个数字,然后遍历数组中其余的数字,判断他们的和是否为s.时间复杂度为O(n^2)思路二使用头尾两个指针,计算头尾两个指针指向的数字之和,如果和大于s,尾指针左移,如果...原创 2020-02-16 23:54:03 · 76 阅读 · 0 评论 -
数组中唯一一个只出现一次的数字
题目数组中除一个数字只出现一次外,其他数字都出现了三次,请找出这个唯一只出现一次的数字。思路思路一使用排序的方法,排序后遍历排序后的数组。时间复杂度为O(nlgn).思路二使用哈希表,时间复杂为O(n),但是需要空间复杂度也为O(n)思路三由于每个数字都出现了三次,而同一个数字每一位上的值都相同,可以分别把所有数字的每一位上的数字加起来(不含进位),每一位的和余3后...原创 2020-02-19 23:50:14 · 347 阅读 · 0 评论