
LeetCode刷题
我始终认为在有一定语言基础的情况下,掌握另外一门语言最快的方法就是刷Leetcode,所以我创建了这一专栏,仅为更好的掌握Java
Y-peak
一个努力的小白pwn
展开
-
2208. 将数组和减半的最少操作次数
2208. 将数组和减半的最少操作次数 一道优先队列题目原创 2023-07-25 09:11:37 · 277 阅读 · 0 评论 -
42. 接雨水
42.接雨水 一个简单的动态规划问题原创 2023-07-23 20:33:51 · 253 阅读 · 0 评论 -
860. 柠檬水找零
860. 柠檬水找零一个简单的贪心题目原创 2023-07-22 12:34:58 · 114 阅读 · 0 评论 -
278.第一个错误的版本
278.第一个错误的版本。原创 2021-09-13 12:27:25 · 510 阅读 · 0 评论 -
557. 反转字符串中的单词 III
557. 反转字符串中的单词 III给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”解题思路由于String类型是不可修改的,所以可以用StringBuffer或者char[]来进行由于char[]效率更高,所以利用toCharArray,转换到char[]类型。然后就开始遍历碰到’ '就暂停然后,这个区间进行排序即原创 2021-09-18 14:33:28 · 605 阅读 · 0 评论 -
344. 反转字符串
344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”原创 2021-09-18 13:40:30 · 597 阅读 · 0 评论 -
21. 合并两个有序链表
21. 合并两个有序链表描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]解题思路利用归并排序的思想就OK了归并排序可以迭代也可以递归,不过时间复杂度是相同的,不同的是迭代空间用的稍微少一点应该。代码class Solution { public ListNode mergeTwoLists(ListNode l1,原创 2021-09-18 13:17:38 · 577 阅读 · 0 评论 -
20. 有效的括号
20. 有效的括号还没使用过java自带的栈结构,正好通过这个题目熟悉一下题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true解题思路括号配对,可以利用栈结构,因为栈是先进后出,也就是后进先出的。每次对栈弹出的元素以及栈是否为空进行原创 2021-09-18 00:26:34 · 587 阅读 · 0 评论 -
13. 罗马数字转整数
13. 罗马数字转整数题目:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 X原创 2021-09-17 23:14:20 · 607 阅读 · 0 评论 -
88. 合并两个有序数组
88. 合并两个有序数组题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:原创 2021-09-17 11:22:28 · 580 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组题目:给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。示例 1原创 2021-09-17 11:06:33 · 576 阅读 · 0 评论 -
283. 移动零
283. 移动零题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解题思路很简单的一个思路,将第一个为0 的地方标记即可。最开始我们假设为0,如果为0,下标不移动,不为0下标才向后移动一位。因为我们标及的是第一个为0的数。可能会疑问如果第一个不是0呢,不是0的话,我们和遍历同步,自己和自己交换相当于不交原创 2021-09-17 10:50:23 · 560 阅读 · 0 评论 -
36. 有效的数独
36. 有效的数独题目:请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。示例1:输入:board =[[“5”,“3原创 2021-09-17 10:05:18 · 622 阅读 · 0 评论 -
53. 最大子序和
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1解题思路说实话,一开始拿到这道题目还真不知道如何下手。但是有一种暴力的方法肯定可以,就是遍历呗谁不会呢。也就是正着思考,按个暴力遍历,看看以第i个元素开头的最大子序列是多少。可以是可以,但原创 2021-09-16 01:22:07 · 568 阅读 · 0 评论 -
217. 存在重复元素
存在重复元素给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true解题思路将数组排序后,从头到尾比较相邻两个元素即可代码实现class Solution { public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); int n =原创 2021-09-16 00:46:38 · 569 阅读 · 0 评论 -
189. 旋转数组
旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解题思路最简单的重建一个同样大小的数组,则满足(i+k)mod(len) 处的位置的值为原数组 i 位置的值。空间复杂度为O(N)我们也可以构造部分数组,大小为k m原创 2021-09-16 00:36:13 · 551 阅读 · 0 评论 -
寻找峰值(局部最大、局部最小)——二分查找
寻找峰值也就是局部最大,可以采用二分法来实现。当然局部最小也一样。峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。解题思路类似这种局部最小和局部最大的问题。我们均可以采用二分的方法来解决,并不一样非要有序才可使用二分进行搜索。特定条件的无序也是可以的。简单原创 2021-09-15 20:03:35 · 3711 阅读 · 0 评论 -
有序数组的平方
有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= nums.length <= 10^4原创 2021-09-15 18:37:16 · 589 阅读 · 0 评论 -
力扣——两数之和
力扣——两数之和题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums = [3,2,4], target = 6输出:[1,2]题解class Solution { public int[] twoSum(int[] nums, int targe原创 2021-08-26 15:38:52 · 128 阅读 · 0 评论 -
力扣——回文数(Java)
回文数简单介绍两个函数valueOF:可以将其他类型的数据类型转换位 string类型length:检测字符串长度charAt:取出对应下标的字符class Solution { public boolean isPalindrome(int x) { String num = String.valueOf(x); int len = num.length(); for (int i = 0; i < len / 2; i++) {原创 2021-04-27 20:56:40 · 207 阅读 · 0 评论 -
力扣——整数反转(Java)
整数反转这个题目需要注意一点就是判断反转后的数字是否会越界。利用Integer.MAX_VALUE和Integer.MIN_VALUE找到最大最小值然后进行判断就可以了,注意一点就是是 /10.0而不是10。原因自己体会一下应该就会了解class Solution { public int reverse(int x) { int ret=0; while(x != 0) { if(ret> Integer.MAX_原创 2021-04-27 20:05:54 · 199 阅读 · 0 评论