LeetCode&数据结构&算法
文章平均质量分 51
弥补先天不足,修炼内功!
起个名字都这么男
Stay hungry,Stay foolish!
展开
-
LeetCode43-字符串相乘
字符串相乘原创 2021-05-10 20:31:09 · 201 阅读 · 0 评论 -
旋转图像
来源 https://leetcode-cn.com/problems/rotate-image/题目给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。例如:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]思路咋一看,确实有些麻烦,需要来回交换当前字符的坐标,并且题.原创 2021-04-29 10:35:57 · 131 阅读 · 0 评论 -
LeetCode11盛水最多的容器
盛水最多的容器题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。来源:力扣(LeetCode)著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。case:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1原创 2021-04-19 11:33:41 · 156 阅读 · 0 评论 -
面试题-栈排序
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。原创 2021-03-16 21:42:08 · 192 阅读 · 0 评论 -
智力题-拿书问题
一共100本书,拿到第100个算赢。两个人分别拿,至少拿1个,最多拿5个。规定你先拿,那么你第一次拿几个,之后怎么拿,才能保证你能拿到第100个。原创 2021-03-16 21:25:38 · 983 阅读 · 0 评论 -
剑指Offer32-Z字形打印二叉树
题目请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二行是从右到左的顺序打印,第三行再按照从左到右的顺序打印,依次类推。示例给定二叉树: [3,9,20,null,null,15,7],3/ \9 20 / \15 7返回结果:[[3],[20,9],[15,7]]解题思路对于二叉树的奇数层,第1,3,5…层,从左到右遍历,对于偶数层从右到左遍历。维护一个列表原创 2021-03-10 21:28:23 · 407 阅读 · 0 评论 -
剑指Offer33-二叉搜索树的后续遍历序列
题目输入一个整数数组,判断该数组是不是某个二叉搜索树的后续遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。示例5/ \2 6/ \1 3输入: [1,6,3,2,5]输出: false输入: [1,3,2,6,5]输出: true解题思路在后序遍历得到的序列中,最后一个数字是树的根节点,对于BST二叉搜索树来讲,左子树上的元素都小于根节点,右子树的元素都大于根节点。所以从左到右遍历数组,直到遇到原创 2021-03-10 20:59:37 · 193 阅读 · 0 评论 -
位运算常见问题
求n的二进制中1的个数首先求出这个数的二进制中除最右侧1的那位不变,其余位都是0。例如:1110,最右侧是1的那个数是0010,0010是如何得出的呢?记一个小公式:n&((~n)+1)n=1110带入即可求出最右侧的1的那位数1110&((~1110)+1)=1110&(0010)=0010因此计算n的二进制中1的个数就很容易了public static int bit1Count(int n){ int count = 0; while(n!=0){原创 2021-02-15 23:00:20 · 210 阅读 · 0 评论 -
返回两个链表相交的节点
问题给定两个链表(可能有环,也可能无环),返回两个链表相交的节点,如果不相交返回null,如果相交多个返回其中一个。分析因为这两个链表可能有环也可能无环,有以下几种情况1、链表A无环,链表B无环2、链表A有环,链表B有环3、链表A有环,链表B无环4、链表A无环,链表B有环第三,四种情况不可能相交,也就不再考虑。因此两个链表要么都是无环,要么都是有环。获取有环链表第一个入环节点下面的操作首先获取的就是有环链表第一个入环节点,如果无环,返回nullpublic Node getLoo原创 2021-02-15 22:37:05 · 262 阅读 · 0 评论 -
红黑树的添加后和删除后维持平衡
学习红黑树前推荐先去了解B 树红黑树红黑树也是一种自平衡二叉搜索树,也叫做平衡二叉B树。红黑树必须满足以下性质节点是Red或者Black根节点是Black叶子结点,外部节点,空节点都是Black红色节点的子节点都是黑色节点(红色节点的父节点都是黑色)(从根节点到叶子结点的所有路径上不能有两个连续的红色节点)从任一节点到叶子结点的所有路径都包含相同数目的黑色节点。红黑树的等价变换红黑树和4阶B树具有等价性黑节点和和红节点融合在一起形成一个B树节点红黑树的黑节点的个数和4阶B树的原创 2021-01-19 09:11:43 · 281 阅读 · 1 评论 -
B树上溢和下溢
B树上溢和下溢原创 2021-01-19 09:09:04 · 1190 阅读 · 0 评论 -
AVL树
AVL树,左旋,右旋操作细节原创 2021-01-19 09:07:41 · 158 阅读 · 0 评论 -
换酒问题
酒瓶换酒问题,不能向商家借酒。原创 2020-12-21 14:35:48 · 192 阅读 · 1 评论 -
Java通过基姆拉尔森公式判断当前日期是不是工作日
基姆拉尔森公式算法如下:基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。判断当前日期是不是工作日Java实现工作日:周一 —— 周五如果是工作日返回true,不是返回false。 /** * 判断一个日期是不是工作日原创 2020-12-11 10:46:45 · 745 阅读 · 0 评论 -
剑指Offer-连续子数组中的最大和
题目输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).输入[1,-2,3,10,-4,7,2,-5]返回值18说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。分析定义一个dp数组,dp[i]表示前i个元素的最大和。状态方程dp[i] = dp[i-1]<0?array[i]:dp[i-1]+array[i-原创 2020-12-08 21:45:33 · 157 阅读 · 0 评论 -
牛客剑指Offer-数字在升序数组中出现的次数
升序数组中查找指定数字的个数原创 2020-12-07 17:56:32 · 156 阅读 · 0 评论 -
83—删除链表中重复的元素
删除有序链表中重复的元素原创 2020-12-07 09:45:59 · 182 阅读 · 0 评论 -
剑指Offer-丑数
给丑数排好序,从小到大,然后找出第n个丑数,丑数是啥?只包含2 ,3, 5 的因子的数原创 2020-12-06 16:09:31 · 106 阅读 · 0 评论 -
剑指Offer58-左转字符串
题目汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!示例输入:“abcXYZdef”,3输出:“XYZdefabc”代码public class Solution { public String LeftRotateString(String s原创 2020-12-06 15:42:16 · 100 阅读 · 0 评论 -
最小的K个数
题目给你一个数组,求出该数组中最小的K的个数。分析这种题型是TopK问题,也就是求出数组或者集合中前K大或者前K小的元素。有多种解决方法,首先想到的是对数据进行排序,然后取出前k个元素。但是如果数据量很大怎么办?这时候需要使用到堆这种数据结构。我们可以维护一个大小为 K 的小顶堆,顺序遍历数组,从数组中取出数据与堆顶元素比较。如果比堆顶元素小,我们就把堆顶元素删除,并且将这个元素插入到堆中;如果比堆顶元素大,则不做处理,继续遍历数组。这样等数组中的数据都遍历完之后,堆中的数据就是前 K 小的数据了。原创 2020-12-05 15:23:43 · 104 阅读 · 0 评论 -
牛客题--进制转换
输入一个数,输出他的N进制。进制转换!原创 2020-12-05 14:29:46 · 304 阅读 · 0 评论 -
大数相加Java
题目以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。分析两个字符串,定义两个指针,分别从这两个字符串的结尾开始遍历,因为可能字符串1比字符串2长度要长,因此只要两者其中有一个还没遍历玩,另一个就用0来补全空位;指针从后往前获取当前两个元素,将当前两个字符,都减去’0’,这就将字符转换成了数字,再将这两个数字和进位值相加,记得初始化进位值是0,然后定义一个变量res,res = (l+r+ans),ans = res/10; l和r分别是两个指针,ans是进位数。最后每次循环将r原创 2020-12-03 20:00:17 · 243 阅读 · 0 评论 -
LeetCode1337矩阵中最弱的K行
题目给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前示例:输入:mat =[[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0],[1,1,1,1原创 2020-12-03 10:51:18 · 338 阅读 · 0 评论 -
206-反转链表-力扣
翻转链表,热度好高。原创 2020-11-28 16:50:28 · 253 阅读 · 0 评论 -
输入两个数求该区间内既是奇数又是合数的个数
简单题,求指定区间内的既是奇数又是合数的个数原创 2020-11-28 16:09:20 · 176 阅读 · 0 评论 -
礼物的最大价值
剑指Offer-面试47-礼物的最大价值,动态规划问题初步原创 2020-11-28 16:03:39 · 96 阅读 · 0 评论 -
LeetCode-151-中等-翻转字符串里面的单词
问题描述给定一个字符串,逐个翻转字符串中的每个单词。说明:无空格字符构成一个 单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。示例 1:输入:“the sky is blue”输出:“blue is sky the”示例 2:输入:" hello world! "输出:“world! hello”解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:原创 2020-11-26 20:29:01 · 172 阅读 · 0 评论 -
牛客网NC15二叉树的层次遍历
题目给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]示例2输入复制{1,2,3,4,#,#,5}返回值复制[[1],[2,3],[4,5]]分析使用一个队列存放二叉树节点,每次向队列中添加非空节点,从根节点开始加入,将队列中的节点的值取出放入ArrayList中,如果当前节点的左右子节点都不为空,也将放入队列中,依次进行遍历。放入原创 2020-11-15 21:11:19 · 151 阅读 · 0 评论 -
leetcode1637-两点之间不包括任何点的最宽垂直面积
题目给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直面积 的宽度。垂直面积 的定义是固定宽度,而 y 轴上无限延伸的一块区域(也就是高度为无穷大)。 最宽垂直面积 为宽度最大的一个垂直面积。请注意,垂直区域 边上 的点 不在 区域内。输入:points = [[8,7],[9,9],[7,4],[9,7]]输出:1解释:红色区域和蓝色区域都是最优区域。输入:points = [[3,1],[9,0],[原创 2020-11-06 20:33:29 · 145 阅读 · 0 评论 -
LeetCode198--打家劫舍问题
题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。来源:力扣LeetCodecase1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 =原创 2020-10-31 16:05:03 · 81 阅读 · 0 评论 -
买卖股票的最好时机
题目假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。例子输入 [1,4,2]输出 3输入[2,4,1]输出2分析记max是获得的最大收益,因为只有一次买入和卖出的机会,所以需要满足以下两个条件买入点必须早于卖出点在前一个条件下,买入点满足区间内价格最低比如:9,2,7,8;卖出点当前值是8,那么买入点就是8左侧区间内的最小值,因此声明变量min是当前元素左侧区间内的最原创 2020-10-27 13:08:34 · 314 阅读 · 0 评论 -
牛客---判断回文串
文章目录题目思路代码实现第一种是从两头向中间进行比较第二种是从中间向两头进行比较题目思路代码实现题目就是判断传入的String是不是回文字符串,是的话返回true,否则返回false。举个例子示例1输入“absba”输出true示例2输入“ranko”输出false思路常见的有两种思路,一种是从两头向中间遍历,另一个是从中间向两头进行遍历。时间复杂度是O(n),空间复杂度都是O(1);代码实现第一种是从两头向中间进行比较public boolean judge原创 2020-10-23 21:02:43 · 482 阅读 · 0 评论 -
合并两个有序链表
链表简单题原创 2020-10-21 11:41:42 · 175 阅读 · 0 评论 -
链表中倒数第K个结点
题目描述emm,题目很简单,返回给定链表的倒数第k个节点解题思路这其实有多种解法,比如你可以先算出链表的总长度n,然后因为求的是倒数第k个节点,那也就是说求得是正数第n-k+1(经过n-k个指针);这种解法时间复杂度最坏情况下是O(2n)。第二种思路是使用快慢指针,快指针先走k步,然后快慢指针一同走,每次走一步。等到快指针为null的时候,返回慢指针所在的位置。慢指针所在的位置就是倒数第k个节点。注意判断指针为null的情况。代码实现public class Solution { pu原创 2020-10-18 15:12:32 · 74 阅读 · 0 评论 -
关于栈的经典问题---判断一个栈的出栈序列是不是有效的
问题给出一个入栈序列,给出一个出栈序列,判断出栈序列是不是合法的。举个例子:1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(因为2入栈的时候在1的上面,所以出栈的时候2先出)分析先创建一个临时栈,比较临时栈中的栈顶元素和出栈序列的第一个元素是否相等,如果不相等,那我就向临时栈中添加元素,添加的元素是根据入栈顺序添加的;如果相等,将临时栈的当前元素pop,并且将出栈序列的下标后移一位(i++)。最后如果栈中原创 2020-10-18 11:50:54 · 406 阅读 · 3 评论 -
剑指Offer-用两个栈实现队列
题目使用两个栈实现一个队列的入队和出队。分析用两个栈实现队列的入队和出队操作,栈的特点是先进后出,队列是先进先出。当从队列中添加数据的时候向stack1添加,出队的时候,从stack2出栈,这时候有三种情况;第一种:stack1和stack2都为空,这是队列中已经没有值,可以抛出异常或者返回默认值。第二种:stack1和stack2都不为空,这时候直接从stack2中出栈,也就是栈顶元素。第三种:当stack2为空的时候,将stack1所有元素都出栈,放到stack2中,这时候原本在stack1原创 2020-10-15 19:49:46 · 158 阅读 · 2 评论 -
牛客-反转数字
题目描述将给出的整数x翻转。例1:x=123,返回321例2:x=-123,返回-321你有思考过下面的这些问题么?如果整数的最后一位是0,那么输出应该是什么?比如10,100你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。输入-123输出-321代码实现import java.util.*;public原创 2020-10-13 20:18:48 · 180 阅读 · 0 评论 -
N叉树的最大深度-DFS
求出二叉树的最大深度,啥?还有N叉树!原创 2020-10-08 21:13:23 · 412 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.100原创 2020-10-04 20:44:22 · 144 阅读 · 0 评论 -
这是一道简单题--速算机器人
文章目录题目看都不用看就过了我天真了思考题目小Q在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:“A” 运算:使 x = 2 * x + y;“B” 运算:使 y = 2 * y + x。在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 A、B 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。来源:力扣(LeetCode)链接:https://lee原创 2020-09-30 10:04:56 · 249 阅读 · 0 评论