Leetcode
文章平均质量分 63
@七禾
有趣都藏在无聊的日子里,所以保持热爱
展开
-
LeetCode_160. 相交链表(哈希表、双指针两种思路 Java)
^ _ ^ 有趣都藏在无聊的日子里,所以保持热爱 @悄悄努力的人er原创 2021-06-13 17:38:46 · 1253 阅读 · 1 评论 -
LeetCode_69. x 的平方根(二分法和数学公式代换 Java实现)
题目描述:69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。解题思路:思路1:二分法看到题目后的第一个想法便是二分法,直接用,也没啥好多想的。class Solution { public int myS原创 2021-06-12 17:09:45 · 1142 阅读 · 1 评论 -
LeetCode_剑指 Offer 57. 和为s的两个数字(利用set、双撞指针两种思路 Java实现)
题目描述:剑指 Offer 57. 和为s的两个数字输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]思路描述:思路1:看到题目,总是首先想到暴力遍历,不出所料,超原创 2021-06-11 15:56:08 · 1162 阅读 · 0 评论 -
LeetCode_剑指 Offer 57 - II. 和为s的连续正数序列(Java实现)(包含滑动窗口的思想)
题目描述:剑指 Offer 57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]思路描述:思路1:暴力获取遍历每个正整数作为连续正整数序列起始元素,若以该元素为起点的元素之和等于原创 2021-06-08 10:25:57 · 148 阅读 · 0 评论 -
LeetCode_101. 对称二叉树(Java实现)
题目描述:101. 对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的思路描述(递归方法):判断当前树是否镜像,看它的左子树 t1 和右子树 t2 是否镜像对称。即,1,左子树 t1 的根节点与右子树 t2 跟节点是否相同2,t1 的左子树与 t2 的右子树是否镜像,并且 t1 的右子树与 t2 的左子树是否镜像这就形成了递归。/** * Definiti原创 2021-05-26 16:25:07 · 131 阅读 · 0 评论 -
LeetCode_剑指 Offer 22. 链表中倒数第k个节点(Java实现)
题目描述:剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.思路描述:使用双指针,让快指针先走,直至两指针差距为指定倒数节点数,然后原创 2021-05-23 18:39:24 · 168 阅读 · 0 评论 -
LeetCode_169. 多数元素(Java实现)
题目描述:169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2思路描述:思路1:1.对数组进行排序,2.返回数组长度n/2索引处的元素由于多数元素出现次数大于n/2,所以,对数组排序后,中间的数一定是所找的多数元素,但由于排序导致效率减低class So原创 2021-05-17 12:30:39 · 350 阅读 · 1 评论 -
LeetCode_136. 只出现一次的数字(Java实现)
题目描述:136. 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路描述:思路1:利用按位异或的运算法则,在二进制下相同取0,不同取1.故相同的两数异或后值为0;public int singleNumber(int[] nums) { int ans=0; for(int i=0原创 2021-05-14 17:04:40 · 206 阅读 · 2 评论 -
LeetCode_58. 最后一个单词的长度(Java实现、3种实现思路)
题目描述:58. 最后一个单词的长度给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5示例 2:输入:s = " "输出:0提示: 1 <= s.length <= 104 s仅有英文字母和空格 ’ ’ 组成思路描述:思路1:使用 split( ) 方法按‘ ’对字符原创 2021-05-13 14:50:49 · 448 阅读 · 0 评论 -
LeetCode_141. 环形链表(Java实现)
题目描述:141. 环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tru原创 2021-05-12 16:23:44 · 162 阅读 · 0 评论 -
LeetCode_66. 加一(Java实现)
题目描述:66. 加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]提示原创 2021-05-11 11:31:05 · 186 阅读 · 1 评论 -
LeetCode_121.122. 买卖股票的最佳时机I、II(Java实现)
题目描述:121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =6)的时候卖出,最大利润 = 6-原创 2021-05-09 12:30:32 · 212 阅读 · 0 评论 -
LeetCode_21. 合并两个有序链表(Java实现)
题目描述:21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示: 两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100 l1 和 l原创 2021-05-08 17:50:39 · 155 阅读 · 0 评论 -
LeetCode_70. 爬楼梯(Java实现)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶思路描述:针对该题,我们先来看看数据规律:当n=1时,f(1)=1种方法,{1};当n=2时,f(2)=2种原创 2021-05-06 14:07:24 · 174 阅读 · 0 评论 -
LeetCode_35. 搜索插入位置(Java实现)
题目描述:35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路描述:思路1:(相对来说比较暴力,速度不够快)由于数组有序,遍历数组,当原创 2021-05-05 13:26:32 · 221 阅读 · 0 评论 -
LeetCode_27.移除元素_283. 移动零(Java实现)
题目描述:27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如原创 2021-05-04 12:56:52 · 115 阅读 · 0 评论 -
LeetCode_20.有效的括号(Java解法)
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1原创 2021-05-03 17:18:56 · 199 阅读 · 0 评论 -
Leetcode_88. 合并两个有序数组(Java实现)
题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1 = [原创 2021-05-02 14:29:16 · 285 阅读 · 0 评论 -
Leetcode_26. 删除有序数组中的重复项(java实现)
题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicate原创 2021-05-01 13:43:17 · 365 阅读 · 1 评论 -
LeetCode_206. 反转链表(Java解法)
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = [ ]输出:[ ]链表可以选用迭代或递归方式完成反转。递归法这个方法相对来说比较难理解,需要从后往前来进行处理,先拿到最后一个结点,让它的下一个引用指向上一个结点,上一个结点的引用设为空,然后递归调用,/** * Definiti原创 2021-04-30 16:18:36 · 242 阅读 · 1 评论 -
Leetcode_14. 最长公共前缀(Java解法)
题目:14. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 " "。示例 1:输入:strs = [“flower”,“flow”,“flight”输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。提前说,我先用了一个Arrays工具类中的自定义比较方法,通过字符串数组中元素长度进行排序,这样就大大降低了后面进行判断是否是该前缀时,所引发的空指针异常和字符串下原创 2021-01-31 18:59:34 · 262 阅读 · 0 评论 -
Leetcode-13. 罗马数字转整数(Java解法)
题目:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的原创 2021-01-30 19:28:42 · 132 阅读 · 0 评论