力扣题库
LW彬彬彬彬彬彬。
这个作者很懒,什么都没留下…
展开
-
将有序数组转换为二叉搜索树Java实现
题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ \-3 9/ /-10 5解题思路对于该题来讲,要先知道二叉搜索树的定义,简单来讲就是比根节点小的放左边,比根节点大的放右边,并且要平衡,左右高度原创 2020-12-07 14:58:14 · 388 阅读 · 0 评论 -
多数元素Java实现
题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2解题思路这题就可以用map来做一个辅助,遍历数组元素,判断是否在map中,如果在,则判断他的nums[i]的key的对应value+1是否大于数组长度/2,是的话直接返回,不是则更新value值+1,如果不在map中原创 2020-12-05 16:24:35 · 394 阅读 · 0 评论 -
相交链表Java实现
题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA= 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B [5,0,原创 2020-12-05 16:06:26 · 362 阅读 · 0 评论 -
环形链表Java实现
题目给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4]原创 2020-12-03 15:27:46 · 238 阅读 · 0 评论 -
只出现一次的数字Java实现
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解题思路对于题目来说其实有一种明显的做法,那就是把数组每个元素进行遍历,我这里使用的集合是map,(当然list也是一样的道理),每次判断是否在map中,如果在则value变成0,如果不在则加入value为1。最原创 2020-12-03 15:05:59 · 394 阅读 · 0 评论 -
验证回文串Java实现
题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false解题思路这到题来讲就是正常的一个验证回文串加上2个限制条件,只比较字母数字和忽略大小写,那么,我们可以先遍历一边把不是字母和数字的字符去掉,得到一个新的,然后就是正常的解题回文串,遍历字符串原创 2020-12-01 17:13:07 · 604 阅读 · 0 评论 -
122. 买卖股票的最佳时机 IIJava实现
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格原创 2020-12-01 16:12:08 · 178 阅读 · 1 评论 -
买卖股票的最佳时机Java实现
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输原创 2020-11-30 16:26:29 · 707 阅读 · 1 评论 -
杨辉三角Java实现
题目给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] ]解题思路其实从题目来看,每一行的除了首和尾,中间都是上一行的相邻两个相加,所以这种就想到要用递归然后递归第一步肯定是出口,而在这题中,无疑是numRows等于1时,返回固定的1,其中要注意的是,题目中说了给定一个非负整数,那么0也是其中要注意的点,原创 2020-11-30 16:12:00 · 262 阅读 · 0 评论 -
存在重复元素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解题思路该题比较简单 有很多种方法可以使用,比如排序,先通过对该数组排序,后对每一个元素和下一个相比,相同则返回true,到最后则返回fal原创 2020-11-26 14:07:06 · 257 阅读 · 0 评论 -
最大子序和Java实现
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。实现思路首先观察,想要返回连续的最大和,首先应该知道取的第一个数应该是正数开始,然后每加上后面的一个数时,如果加上后和小于0,然后重新去获取这之后的第一个正数上面的逻辑是在数组内有正数的前提下,那如果没有正数呢?我们应该每次比较一下当前数和之前记录原创 2020-11-25 13:44:54 · 261 阅读 · 0 评论 -
每日练习-合并两个有序链表Java实现
题目解题思路:递归对于 l1 , l2 两个链表来说,要组成一个升序的链表,那就是要把每一个去对比,得到小的那个节点,然后在用小的节点的下一个继续做对比,这样子递归的想法就出来了第一步当然是判断两个链表是否都为空,都为空则返回null第二步,能进到第二步就说明总有一个链表不为空,所以去做判断,如果l1为null,则返回l2此时的节点,并且后面都无需在做比较了,因为l1已经是null,同理就得如果l2为null,则返回l1此时的节点。第三步,能走到第三步则表示此时两个链表节点都不为null,则原创 2020-11-25 10:46:26 · 408 阅读 · 0 评论 -
力扣面试题库之简单题集合Java实现
No1代码class Solution { public int mySqrt(int x) { double sqrt = Math.sqrt(x); return (int)sqrt; }}No2ps:这题大概都喜欢用递归,但是递归重复计算太多,提交会超时~~代码class Solution { public int climbStairs(int n) { int i=1; int j=2;原创 2020-09-10 17:08:16 · 505 阅读 · 0 评论 -
力扣面试题库之外观数列Java实现
题目解题思路:递归由题目知,每一个都是对上一项的描述,这就说明一定可以用递归做。首先,先来个结束递归的条件,也就是n等于1,就返回“1”。-之后就去递归得到上一项的字符串,循环这个字符串去判断是否是连续数字,用标记计数它的个数,直到不相等时,就用一开始创建的Stringbuilder去加入这个计数的字符串,然后在加上这个重复的数字,如果不是重复的,则加上“1”和这个数字即可。代码class Solution { public String countAndSay(int n) {原创 2020-08-20 17:40:10 · 229 阅读 · 0 评论 -
力扣面试题库之实现strStr()Java实现
题目解题思路:这次解题思路叫不会就转行,不解释了,哈哈代码class Solution { public int strStr(String haystack, String needle) { if(haystack==null){ return -1; } if(needle==null){ return 0; } return haystack.indexOf原创 2020-08-20 16:51:37 · 172 阅读 · 0 评论 -
力扣面试题库之删除排序数组中的重复项Java实现
题目解题思路:循环迭代首先最简单的是应该先分为二个部分,先是计算新的长度,然后在去修改数组计算新的长度应该没人不会吧,就是遍历一边数组就可以了修改数组的话因为题目不让使用额外的数组空间,所以也变得有一点点难度,所以这里我们就可以去每找到一个不同的元素时,用计数的值减一就是此时应该被取代的位置。代码class Solution { public int removeDuplicates(int[] nums) { int count=1; for(i原创 2020-08-20 16:37:51 · 155 阅读 · 0 评论 -
力扣面试题库之有效的括号Java实现
题目解题思路:迭代循环首先应该知道这题目总共包括两种合法字符串,一种就是【】直接是一个完整的符号,或者是一个完整的符号内好包括其他的,比如(【】)。所以只要去把[],(),{},这些去找出来删掉,删到最后在判断是否为空,为空代表true有效。代码class Solution { public boolean isValid(String s) { if(s==null || s.length()==0){ return true;原创 2020-08-19 17:54:28 · 166 阅读 · 0 评论 -
力扣题库之电话号码的字符组合Java实现
题目解题思路:递归因为输入的字符串是不定长的,所以用迭代就做不了,所以采用递归对于字符串中每个一字符数字,才得到相应映射的字符串,利用每一个字符串都去遍历,利用StringBuilder对象去添加字符,在递归调用函数下一个的索引。这可能讲的不是很清楚,主要还是看代码~~代码class Solution { StringBuilder sb = new StringBuilder(); List<String> list = new ArrayList<&g原创 2020-08-05 16:50:58 · 159 阅读 · 0 评论 -
力扣题库之罗马数字转整数Java实现
题目解题思路:迭代有题目知,如果当前字符代表的值不小于其右边,就加上该值;否则就减去该值字符与数值间的映射可以用map代码class Solution { public int romanToInt(String s) { if(s==null || s.length()==0){ return 0; } Map<Character,Integer> map = new HashMap<>原创 2020-08-05 15:54:41 · 232 阅读 · 0 评论 -
力扣面试题库之删除链表倒数第N个节点
题目解题思路: 迭代想要删除链表中一个节点,就需要先获得该节点的前一个节点,在而想要获得倒数第N个节点,转换一下思维就等价于获得正数的L(链表长度)-N+1个节点,这样就简单了.首先把头结点赋给两个节点node1,node2,先遍历一边node1算出链表长度,在遍历node2当此时为第L-N时,就代表这是倒数第N个节点的前一个,就让他的next=next.next就行了。代码class Solution { public ListNode removeNthFromEnd原创 2020-08-04 21:14:30 · 181 阅读 · 0 评论 -
力扣面试题库之三数之和Java实现
题目解题思路:迭代这题的解题思路有点像之前的两数之和那道题目,没做过的可以先去做那道题,就是利用公式转换,把a+b+c=0转换成 a+b=-c;这样就直接变成了两数之和的题。首先双层循环去逐个匹配相加值是否存在于数组中,这一步可以用hashmap来实现,先把数组中元素全部加入到map中,key为值,valuse为索引,然后判断是否存在于map中即相等,还得判断索引是否一致。要求的不可重复,则是先用Collections.sort()去排序,然后全部循环完,在吧list去转成set在转为list即原创 2020-07-28 21:43:39 · 280 阅读 · 0 评论 -
力扣面试题库之最长公共前缀Java实现
芜湖~~解题思路:旋转乱做之迭代遍历这道题目最直接的想法就是对一个数组内每一个进行遍历,比较每一个对应索引的值是否一样,从而最后得到最长公共前缀首先,先判断数组是否为空,如果为空,直接返回空,循环一次数组,得到数组中字符串长度的最小值对于循环这个最小值,里嵌套一个循环数组,让第一个字符串的每一个字符与其他字符串相应位置一一对比。代码 coming inclass Solution { public String longestCommonPrefix(String[] strs)原创 2020-07-23 21:44:23 · 210 阅读 · 0 评论 -
力扣面试题库之字符串转换整数Java实现
来咯来咯,题目真的来咯解题思路:乾坤大挪移之循环迭代之硬解解题方向应该不用说了吧,就普通的方法也就是迭代循环遍历了。就是遍历字符串中每一个,一开始遍历直到不为空格为止开始其操作,如果有正负号,做个标记,之后判断是否为数字,不为数字则直接结束,为数字则加入字符串Stringbuilder中。至于代码中转换成整形放异常处理中就是因为大整数转换整形会报错哦,直接捕获异常返回int型的最大范围。代码class Solution { public int myAtoi(String str原创 2020-07-21 21:37:28 · 150 阅读 · 0 评论 -
力扣面试题库之整数反转Java实现
题目解题思路: 俗称硬解在看到题目,我竟然不是想着去找他的反转的规律,而是直接通过遍历反转。想法有点硬,拉胯货色,不过能解出来就是好解。。就是先判断数字是否带符号,也就是判断是否为负数,如果是负数,则倒转遍历转成字符串类型的数字遍历到索引为1,如果不是负数,则遍历到0.其中注意的是,如果一开始是0,则不去操作,直到出现不为0的值开始进行操作,具体操作见代码。还有看了代码不要问为什么要放异常里,该死的力扣提交会输入大整数进行测试,如果溢出则返回0,所以放异常里捕获,大整数转为int型会报错。原创 2020-07-21 20:52:49 · 277 阅读 · 0 评论 -
力扣面试题库之最长回文子串
题目是这个解题思路–emmmmmmm,没有思路~~用了暴力解法。。方法有点垃圾,就不解释了。纯暴力。。。代码是这class Solution { public String longestPalindrome(String s) { if(s.length()==0||s==null){ return ""; } int count=0; String ss=""; String f原创 2020-07-21 17:08:17 · 140 阅读 · 0 评论 -
力扣面试题库之无重复字符的最长子串Java实现
题目来啦~~解题思路:迭代由题目得到,需要一个最长的没有重复的字符的长度首先先判断字符串是否为空或者长度为0,则返回0使用迭代的话,应该都能想到使用两层循环去遍历已字符串中每一个字符开头的最长的无重复字符的子串的长度。Java中可利用map中的containKey()方法去判断是否有重复,存在即重复。代码代码class Solution { public int lengthOfLongestSubstring(String s) { if(s.length()=原创 2020-07-19 11:26:48 · 236 阅读 · 0 评论 -
力扣面试题库之两数相加Java实现
题目题目题目在这解题思路:迭代由题目得,每次对于两个节点相加都需要先判断是否前一位有进位,有则两个节点的和加上进位,无则只加两个节点的和。进位默认初始值为0.所以用迭代循环去做,当每次其中有一个节点不为空时,或者是都为空但是前一个有进位,则都要进入循环。循环中获取两个节点的值,如果节点为空,则获取0,然后得到节点值相加在加上进位得到总和,记录进位赋值成中和取整10,然后就是创建一个节点,节点值为总和求余10,每次做完判断2个节点是否为空,不为空,则让它等于它的下一个节点。ok,结束了,上代原创 2020-07-16 10:55:13 · 394 阅读 · 0 评论 -
力扣面试题库之二叉树的最大深度Java实现
上题目解题思路:递归一见到题目就应该想到应对每一层的节点进行判断首先,根节点是否为空,为空深度就是0,则返回0如果不为空,则调用函数传入参数为该节点的左节点的值和调用函数传入参数为该节点的右节点的值,去进行比较,去更大的那个值在加上他该节点的深度,也就是1,所以返回更大的值+1即可。好了,上代码public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(in原创 2020-07-15 17:35:50 · 139 阅读 · 0 评论 -
力扣面试题库之两数之和Java实现
废话不多说,上题目解题思路 :迭代由题目得,在数组中得到两个数使得num1+num2=target给定值,那就利用数学思维,转化一下公式,变成找到两个数使得num1=target-num2,这样子去迭代寻找具体迭代过程就是:循环遍历数组中每一个值到倒数第二个为止,对每一个在去循环和它之后的每一个进行判断上述中的公式,如相等则把两个数赋值给一个长度为2的数组中,最后返回该数组。好了,思路就到这了,上代码class Solution { public int[] twoSum(int[原创 2020-07-14 17:25:49 · 194 阅读 · 0 评论 -
力扣面试题库之对称二叉树Java实现
废话不多说,直接上题目解题思路:递归首先题目说得很清楚了,判断一个二叉树是否堆成就是判断一个是否是镜像对称,在换句话说,就是对二叉树的左边和右边是否可以“对半折叠”。故采用递归的话,就是先判断根节点是否为空,为空则返回true,不为空的话,判断该二叉树是否对称就变成了判断该节点的左右子数是分对称,返回判断的值即可。然后又该如何判断左右子树是否对称呢,首先老样子,先判断传入的左右节点是否为空,都为空那就肯定对称,返回true,如果只有一个为空或者是左右节点的数据值不相等则代表不对称,返回false原创 2020-07-14 16:09:15 · 259 阅读 · 0 评论