Java
liyatjj
人间理想zxc
展开
-
LeetCode-- 反转字符串
思路很简单,就是首尾字母进行交换。但是要注意循环的次数,比如len=5,那么应该交换2次,len/2=2,所以取不到等号;当len=6时,len/2=3,此时就是0,1,2共三次交换。原创 2022-11-22 17:23:12 · 841 阅读 · 1 评论 -
LeetCode-- 3 的幂
假设这个数是3的幂次方,那么它应该满足的是,当不断的除以3,最后得到的数应该是1,所以就给它不断的除以3,看最后得到的数是否为1。原创 2022-11-22 17:11:36 · 813 阅读 · 0 评论 -
LeetCode-- 移动零
思路很简单,就是先遍历一遍,将不为0的项前移,按顺序进行前移j记录元素移动的位置到了哪里,这样剩下的就是要补0的地方,都补上0即可。原创 2022-11-22 16:40:23 · 925 阅读 · 0 评论 -
剑指 Offer II 076. 数组中的第 k 大的数字
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。输入: [3,2,1,5,6,4] 和 k = 2。先放代码在这里,等理解透彻了再写思路。原创 2022-11-20 17:08:44 · 609 阅读 · 0 评论 -
剑指 Offer II 018. 有效的回文
思路很简单,就是遍历一遍字符串,将其中的字母或者数字放入StringBuffer中,然后采用双指针进行判断,判断过程中,一旦有不相同的,就返回false即可,对于其他情况的考虑可以直接在最后返回true。原创 2022-11-20 15:36:28 · 672 阅读 · 0 评论 -
剑指 Offer II 068. 查找插入位置
题目有要求,要求时间复杂度为O(log n),所以采用二分查找,首先是如果能找到对应的元素,那么就直接返回下标即可,如果找不到,最后就直接返回left,left就是要插入元素的下标应该所对应的位置。原创 2022-11-19 17:44:17 · 829 阅读 · 0 评论 -
剑指 Offer II 034. 外星语言是否排序
给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;比如“apple”,“app”,这种情况就是false,直接返回false即可,但是前提是得等前几个字母比较完成,所以这个判断应该放在第二个的for循环之外。还有最后就是类似“app”,“apple”这种情况,一定会返回true,只要最后默认返回true即可。输出:true 解释:在该语言的字母表中,‘h’ 位于 ‘l’ 之前,所以单词序列是按字典序排列的。原创 2022-11-19 17:04:59 · 757 阅读 · 0 评论 -
LeetCode翻转字符
如果一个由 ‘0’ 和 ‘1’ 组成的字符串,是以一些 ‘0’(可能没有 ‘0’)后面跟着一些 ‘1’(也可能没有 ‘1’)的形式组成的,那么该字符串是 单调递增 的。我们给出一个由字符 ‘0’ 和 ‘1’ 组成的字符串 s,我们可以将任何 ‘0’ 翻转为 ‘1’ 或者将 ‘1’ 翻转为 ‘0’。定义新变量来不断更新翻转次数,ndp0记录的是将所有的0都反转成1需要的次数,而ndp1则记录每次的最小值。动态规划问题,其实就是要想整个字符串翻转最小,那么就要每个子串都翻转最小。输入:s = “00110”原创 2022-10-20 21:10:12 · 717 阅读 · 0 评论 -
LeetCode爬楼梯的最少成本
注意:数组大小应该是len+1,因为dp数组的0和1的值都是0,dp【1】就代表一层,如果一共三层,那么dp【3】就记录了到达楼顶的体力值。思路就是新建一个数组来存储到达该楼层所需要的体力值,初始时,dp【0】和dp【1】都是0,之后可以选择爬上一层或者两层。数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。,最后直接返回到楼顶的体力值就好。原创 2022-10-20 20:15:42 · 552 阅读 · 0 评论 -
Mybatis入门基础之查询表中信息
在这里注意由于有好几个用户,有好几列,需要用到selectList而不是selectOne(会报错)。这个时候就可以将上一步的mapper source进行修改,改为当前的文件名即可。直接从官网下载相关代码就行,但是有些地方需要改动,改变数据库连接信息。先定义user类,以及相应的get,set方法。类里面的变量就和数据库表中的名称一样。最后新建一个class,里面编写main方法。先创建数据库mybatis,再建表。,因为最后返回的是字符串。先加载核心配置文件,获取。就是简单的sql语句啦。原创 2022-10-15 21:16:20 · 1826 阅读 · 0 评论 -
IDEA配置maven报错 cannot resolve plugin
在浏览解决问题的时侯发现,自己新建的project不是maven,而是maven模板,由于我的IDEA是2022.1版本的,所以有些地方不一样。在maven下新建一个repository文件夹作为本地仓库,之后从云端下载的相关文件会下载到这里。之前看了好多文章,说是因为网络问题造成的,具体也不太知道,解决办法就是加镜像。Build System选择Maven,JDK选择自己对应的版本,我的是1.7。当所需要的文件在本地仓库中找不到时,就从云端下载到本地仓库中。就在下载的maven的conf中。原创 2022-10-13 22:23:28 · 5372 阅读 · 0 评论 -
LeetCode最大的异或
利用字典树进行解题。将每个元素转换成二进制位,从高到底依次表现在字典树上,然后对字典树就行搜索当遇到节点是0的时候,由于进行异或操作,下一个最好选择1;当遇到节点是1的时候,由于进行异或操作,下一个最好选择0;原创 2022-10-11 09:31:53 · 584 阅读 · 0 评论 -
LeetCode乘积小于 K 的子数组
当在某个区域的时候,子数组的乘积的值是小于k的,但是随着右侧的j的移动,乘积增大,此时要判断乘积和k的关系,当在保证i原创 2022-10-10 15:45:36 · 548 阅读 · 0 评论 -
LeetCode数组中和为 0 的三个数
先对数组进行排序;在第一次循环中,如果取到了和之前的i一样的值,就跳过,也就是continue;第二次循环里面,对于j的操作和上面一样,但是要注意,当i和j是同样的值时,这种情况当然也是成立的,应该考虑,只需要加一个判断条件,j>i+1即可,就可以将i,j对应元素值相同的情况考虑进去。(例如,i和j都是-1的时候,在最终的答案中也是一种情况)原创 2022-10-09 22:13:03 · 817 阅读 · 0 评论 -
LeetCode字符串中的所有变位词
由于每次在字符串s中寻找的都是长度为p的某些字符,所以可以想到滑动窗口。定义两个数组sc,pc,大小都是26,当遇到某个字母时就将其对应数组值加1。sc存储在当前窗口下的某些字符对应的字母个数,pc存储字符串p的相应字母个数,pc数组不变,作为后续比较的基础原创 2022-10-08 09:58:07 · 701 阅读 · 0 评论 -
LeetCode二维子矩阵的和
采用求前缀和的方法,新建一个sum数组,sum数组与matrix行数相同,但是列数多一列,用来存储前面元素的加和。这样就可以得到每行的sum值分别对应前面几个值的加和,当要计算例如红色矩阵里面的第一行时,只需要用右上角右侧的元素的sum减去左上角元素的sum值即可。原创 2022-10-07 22:16:59 · 597 阅读 · 0 评论 -
LeetCode实现前缀树
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true;boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);插入字符串时,从根开始,子节点存在,移动到子节点,处理下一个字符;子节点不存在,创建新子节点,移动到子节点上。查找前缀:从根开始,查找,如果子节点存在就移动到子节点;// 返回 True。原创 2022-10-07 17:54:29 · 517 阅读 · 0 评论 -
LeetCode岛屿的最大面积
对于每一个小方块而言,去搜寻它的上下左右四个方向去寻找和它同为1并且相邻的方块,记录相应个数,最后取最大值。深度优先搜索:1.由于岛屿的设定是一定得是1,所以可以先增加一个判断条件,当值是0的时候就可以直接返回0。(1)由于要考虑到数组越界问题,所以当边界的元素搜索到边界以外的元素时需要返回0,这个时候其实就是数组下标越界的时候。原创 2022-10-07 16:05:27 · 194 阅读 · 0 评论 -
LeetCode排序数组中只出现一次的数字
二分查找。由于是有序数组:在要找的元素下标的左侧:nums【i】=nums【i+1】时,i一定是偶数;在要找的元素下标的右侧:nums【i】=nums【i+1】时,i一定是奇数。原创 2022-10-01 18:29:58 · 304 阅读 · 0 评论 -
LeetCode从根节点到叶节点的路径数字之和
深度优先搜索。对于遍历到的节点:如果根节点是null,直接返回0(定义sum的时候应该定义在这个语句的下面,否则存在节点值为null的情况的时候会报错)。如果遍历到的节点是叶节点,就直接返回sum即可(sum已经计算过上面节点的和以及已经加上了当前节点的值)。如果遍历到的节点有左孩子或者右孩子,那就递归调用接着往下深度搜索。原创 2022-09-29 21:34:26 · 140 阅读 · 0 评论 -
LeetCode最小时间差
分析可得,最小值可能是两个相邻的元素的差,例如10:59,11;00,就是两者之差等于1;也可能是开头和结尾的差,但此时,如果两者之间的差值大于12h的话,就要用到1440-两者之差,例如00:00,23:59,应该是相差一分钟,此时用1440减去两者分钟数的差值得到的就是正确的值。原创 2022-09-28 19:16:29 · 331 阅读 · 0 评论 -
LeetCode每日温度
这个解法比较巧妙的一点就是在栈里面的元素一定是从栈顶开始递减排列,这样每当遇到比刚进入栈要大的元素就会将相应的元素弹出,而且他们的下标之差也是它们之间距离的天数,也就是题目所求的答案。用两个for循环解决,每次的cur就是已经入栈的值,在搜索看即将入栈的值是否有大于它的,有的话,记录到ans数组,跳出当前循环,cur取下一个元素。如果要进入栈的元素小于已经在栈里面的元素,加入栈,直到最后元素遍历一遍之后,如果未弹出栈的就置为0.由于【2,50】还是大于【0,30】,【0,30】出栈,天数是2。原创 2022-09-27 10:53:56 · 476 阅读 · 0 评论 -
LeetCode单词长度的最大乘积
将每个单词所含的字母通过位运算存储到一个数组中,共有26个字母,用0~25表示,当遇到某个字母时,修改相应的位,由于每个单词不含相同的字符,所以每个字母之间互不影响,例如如果字母是a,就把第0位设置为1,存储到mask数组中;然后就比较当两个单词所对应的mask数组值,如果两者相与值为0,那就更新ans的值为二者单词长度的乘积。原创 2022-09-26 11:05:28 · 107 阅读 · 0 评论 -
LeetCode回文子字符串的个数
先找出回文中心,然后再向两边进行扩展,如果扩展过程中两个指针所指的元素相等时就说明找到了一个回文子串。注意:单个字符当然也要算作在内。原创 2022-09-26 09:23:41 · 395 阅读 · 0 评论 -
LeetCode粉刷房子
当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。输入: costs = [[17,2,17],[16,16,5],[14,3,19]]解释: 将 0 号房子粉刷成蓝色,1号房子粉刷成绿色,2 号房子粉刷成蓝色。请计算出粉刷完所有房子最少的花费成本。原创 2022-09-25 21:53:58 · 133 阅读 · 0 评论 -
LeetCode二叉搜索树中的中序后继
利用二叉搜索树的性质解决。对于某个节点来说,如果存在右子树,那么所要求的结果就是**右子树里面的最左侧的节点(也就是中序遍历在该节点之后遍历到的)原创 2022-09-25 21:09:15 · 326 阅读 · 0 评论 -
LeetCode往完全二叉树添加节点
首先想到的就是层序遍历,利用层序遍历找到符合条件的父节点,查看它的左孩子和右孩子,如果左孩子为null,就新添加节点作为它的左孩子,如果左孩子不为null,右孩子为null,就添加其右孩子节点。原创 2022-09-25 19:19:50 · 269 阅读 · 0 评论 -
LeetCode二叉树剪枝
首先要将题目分析对,题目的意思是,当某个节点值为0,并且其左孩子为null,且右孩子也为null时才会进行剪枝。节点 node 的子树为 node 本身,以及所有 node 的后代。遍历的时候,先递归遍历其左子树,再递归遍历其右子树。如果某个节点是null,那就直接返回null即可。原创 2022-09-23 21:51:19 · 354 阅读 · 0 评论 -
LeetCode二叉树的右侧视图
层序遍历,不过就是要在每层遍历完成之后判断最后一个元素,也就是在while循环的时候用len来判断是否是最后一个元素,每经过一次while,其实就是一个元素出队列,当len为0时,也就是最后一个元素出队列,此时就记录到ans中;这一点对于根节点也照样适用。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。原创 2022-09-23 21:07:32 · 134 阅读 · 0 评论 -
LeetCode二叉树每层的最大值
采用广度优先搜索(层序遍历)解决问题。层序遍历实现过程类似于队列,遍历完当前节点后将其左孩子以及右孩子依次加入队列,这样就能保证出队列的时候对于每一层都是从左往右;而且每次遍历到一个节点的时候,都这样做,直至遍历到最后一层原创 2022-09-23 19:33:10 · 410 阅读 · 0 评论 -
LeetCode二叉树最底层最左边的值
利用深度优先搜索,每遍历一层就将高度加1。另外还需要记录height的变化,用height记录当前遍历的节点的变化,需要和curHeight进行比较,令curHeight存储高度,一直是最大的,curVal记录相应节点值。原创 2022-09-23 10:57:42 · 394 阅读 · 0 评论 -
LeetCode变位词组
题目的关键点就在于统计每个字符出现的次数,可以将每个字符以及字符出现的次数作为map集合的key。2.将元素的每个字母以及其出现的次数进行拼接作为map集合的key,方便后续判断是不是变位词。4.map集合的key就是上面的key,value就是对应的list集合的值,1.对于每一个strs中的字符串,在count数组中存储其每个字母的个数,作用:如果存在相应的key则返回其对应的value,否则返回给定的默认值。注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。原创 2022-09-23 09:53:13 · 153 阅读 · 0 评论 -
LeetCode重排链表
1.需要两个指针,一个指向就是从0开始,另外一个指向list中的最后一个元素。3.每次进行链表节点的构建时,进行i++或者j–,移动指针寻找下一个节点的值。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。4.当构建完毕之后,链表结尾的指针应该指向null。输入: head = [1,2,3,4]2.链表构建完毕的条件:i和j相等时。输出: [1,4,2,3]原创 2022-09-22 17:16:02 · 349 阅读 · 0 评论 -
LeetCode只出现一次的数字
将所有元素转换成二进制,然后对每一位进行相加,对3取余(如果不是最终答案的元素,每个数字出现三次),结果得到的数就是最终答案的二进制位。所以首位是(1+1+1+1)%3=1,第二位是(0+0+0+1)%3=1。先遍历nums数组,对元素进行计数,并将结果记录到map集合中。原创 2022-09-22 10:48:41 · 183 阅读 · 0 评论 -
LeetCode二进制加法
定义carry为每一位运算的结果,要先判断某一位是否存在,不存在就补0,然后carry进行计算,而在进行计算时用到的是数值,要将char类型转换成int,减去‘0’即可。给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。原创 2022-09-21 19:09:44 · 303 阅读 · 0 评论 -
LeetCode生成匹配的括号
回溯法。左括号的个数记为left,右括号个数为right,而结果中左右括号个数一定是n个,也就是说括号数最大为n;新建StringBuilder类的对象cur用来存储当前有可能构成最终结果的情况;res集合存储最终返回的结果。回溯的条件就是当cur中的左括号和右括号个数都是n的时候,此时也要将cur这种情况加入到res中。原创 2022-09-20 10:51:25 · 232 阅读 · 0 评论 -
LeetCode只出现一次的数字
通过分析可以得知,由于数组里面只有一个数字仅出现一次,所以当所有数字进行异或运算时,只出现一次的数字就是异或的结果。(由于异或的特性,两个相同的数字进行异或运算结果是0,0再与其他数字异或就是该数字)给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。原创 2022-09-19 21:51:38 · 108 阅读 · 0 评论 -
LeetCode允许重复选择元素的组合
定义一个索引,用来记录已经索引到candidate中的哪个元素,索引idx取值从0到4(candidate的大小,每决定一个元素);而且当返回到该节点时,就说明该回溯到上一级的节点,而对应的combine集合的对应添加的元素就应该删除。定义一个集合combine,存放有可能构成target的元素,而最后的ans就是由多个combine数组集合构成的集合;接着就直接跳过idx这个节点,一直往下进行判断,如果碰到返回的情况就是回溯,就会重新判断上一个节点,依次类推。原创 2022-09-19 21:30:37 · 402 阅读 · 0 评论 -
LeetCode所有大于等于节点的值之和
题目里面要求每个节点是大于它的节点和它本身的和,所以反序中序遍历即可,让节点值大的先进行计算,这样只需要一遍就行。需要注意的是,每个节点的值修改成sum,sum应该是全局变量。反序的中序遍历就是先遍历右子树,再是根节点,然后再是左子树。二叉搜索树的性质就是左子树小于根节点,右子树大于根节点。节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。原创 2022-09-19 11:24:23 · 296 阅读 · 0 评论 -
LeetCode数据流的第 K 大数值
首先要读懂题,题目里要求要找的是第k大的数,如果要是从小到大排列的话,第k大的元素在集合中应该是第list.size()-k+1个数;注意是排序后的第 k 大元素,不是第 k 个不同的元素。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。还有就是利用优先队列,PriorityQueue本质上是小根堆,按优先级进行排序,对于int型的元素来说,在保证队列大小就是k的前提下,队列中的元素从队尾到队首依次减小,而。poll():队首元素出队列。原创 2022-09-19 09:55:53 · 281 阅读 · 0 评论