算法学习Leetcode
weixin_46101560
这个作者很懒,什么都没留下…
展开
-
力扣算法—爱吃香蕉的珂珂
珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。输入:piles = [3,6,7,11], h = 8输出:4这个采用的二分法,先根据p原创 2022-06-07 11:20:39 · 131 阅读 · 0 评论 -
力扣算法—在圆内随机生成点
给定圆的半径和圆心的位置,实现函数 randPoint ,在圆中产生均匀随机点。实现 Solution 类:Solution(double radius, double x_center, double y_center) 用圆的半径 radius 和圆心的位置 (x_center, y_center) 初始化对象randPoint() 返回圆内的一个随机点。圆周上的一点被认为在圆内。答案作为数组返回 [x, y] 。这个题是进行编写类的初始化方法和方法。初始化方法对类的属性进行赋值,randPoint原创 2022-06-05 09:33:34 · 258 阅读 · 0 评论 -
力扣算法——独特的电子邮件地址
每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 ‘@’ 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 ‘.’ 或 ‘+’ 。例如,在 alice@leetcode.com中, alice 是 本地名 ,而 leetcode.com 是 域名 。如果在电子邮件地址的 本地名 部分中的某些字符之间添加句点(‘.’),则发往那里的邮件将会转发到本地名中没有点的同一地址。请注意,此规则 不适用于域名 。例如,"alice.z@leetcode.com” 和 “alicez@leet原创 2022-06-04 10:24:06 · 187 阅读 · 0 评论 -
力扣算法——数组中重复的数据
442.数组中重复的数据给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[2,3]示例 2:输入:nums = [1,1,2]输出:[1]示例 3:输入:nums = [1]输出:[]//没看题的遍历,原创 2022-05-08 18:01:46 · 97 阅读 · 0 评论 -
力扣算法学习(二十)
跳跃游戏 II给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 public int jump(int[] nums) { //当nums为1时落地即为原创 2022-01-24 01:32:56 · 42 阅读 · 0 评论 -
力扣算法学习(十九)
跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。可以先设立一个dp来取的你能到达的最大下标,如果大于数组最大下标则返回true public boolean canJump(int[] nums) { //当数组为长度1时,直接原创 2022-01-24 00:18:15 · 2451 阅读 · 0 评论 -
力扣算法学习(十八)
删除并获得点数给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例 2:输入:nums =原创 2022-01-23 23:10:09 · 220 阅读 · 0 评论 -
力扣算法学习(十七)
打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7原创 2022-01-21 18:16:12 · 84 阅读 · 0 评论 -
力扣算法学习(十六)
使用最小花费爬楼梯给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例1:输入:cost = [10,15,20]输出:15解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。输入:cost = [1,100,1,1,1,100,1,1,100,1]原创 2022-01-17 20:48:17 · 75 阅读 · 0 评论 -
力扣算法学习(十五)
爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶根据题目可知除了前两个台阶之外都可以用前两个方法之和;比如第三个台阶,你可以选择从第一个台阶2阶爬上去,或者第二个台阶1阶上去,可能有人会问为什么不能从第一个台阶1阶1阶上去;因为,你得路过第二个台阶,就会和第二阶重复:上第一阶一个方法:1阶上原创 2022-01-17 19:39:15 · 285 阅读 · 0 评论 -
力扣算法学习(十四)
最小路径和给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。我先是使用的递归,在25个例子卡住了,原因超时,后来在自己的编译器上测试25例子时是可以出来的public class Solution { public static void mai原创 2022-01-17 18:59:49 · 3949 阅读 · 0 评论 -
力扣算法学习(十三)
第 N 个泰波那契数泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。由题可知,当n<3时返回值已经给出了,而后来的数可以依次加法得到,若是要得到n只需要加n-3次;class Solution { public int tribonacci(int n) { if(n<3){原创 2022-01-16 23:44:00 · 4027 阅读 · 0 评论 -
力扣算法学习(十二)
斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1//递归class Solution { public int fib(int n) { if(n==1){原创 2022-01-16 22:19:45 · 3610 阅读 · 0 评论 -
力扣算法学习(十一)
最大子数组和–动态规划给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。public int maxSubArray(int[] nums) { if(nums.length==1){ return nums[0];原创 2022-01-15 16:41:24 · 51 阅读 · 0 评论 -
力扣算法学习(十)
存在重复元素给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true//强撸法就是一个一个取然后去遍历是否重复,就不在这写了//进阶的强撸法是先用java 自带的数组排序后,两两取值对比public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); fo原创 2022-01-15 11:16:18 · 44 阅读 · 0 评论 -
力扣算法学习(九)
两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNo原创 2022-01-15 10:19:47 · 40 阅读 · 0 评论 -
力扣算法练习(八)
二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请原创 2022-01-14 15:26:19 · 67 阅读 · 0 评论 -
力扣算法学习(七)
字符串的排列给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。输入:s1 = “ab” s2 = “eidbaooo”输出:true解释:s2 包含 s1 的排列之一 (“ba”).我的:class Solution { public boolean checkInclusion(String s1, String s2) { HashMa原创 2022-01-11 23:17:15 · 461 阅读 · 0 评论 -
力扣算法学习(六)
无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。官方答案:class Solution { public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> occ = new Ha原创 2022-01-11 20:21:20 · 51 阅读 · 0 评论 -
力扣算法学习(五)
删除链表的倒数第 N 个结点栈public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0, head); Deque<ListNode> stack = new ArrayDeque<ListNode>(); ListNode cur = dummy; while (cur != null) {原创 2022-01-05 19:55:39 · 292 阅读 · 0 评论 -
力扣算法学习(四)
链表的中间结点 public ListNode middleNode(ListNode head) { ListNode fast=head,slow=head;//新建双节点一快一慢 while(fast!=null&&fast.next!=null){ slow=slow.next; fast=fast.next.next;//当fast比slow双倍移动时 } return原创 2022-01-05 19:51:22 · 127 阅读 · 0 评论 -
力扣算法学习(三)
轮转数组输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rotate-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。public void r原创 2022-01-05 19:48:46 · 1069 阅读 · 0 评论 -
力扣算法学习(二)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。队列法:队列是先入先出,只要把所以非0数据存到队列中,再依次存进原原创 2022-01-01 17:13:28 · 231 阅读 · 0 评论 -
力扣算法学习(一)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-search著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。二分查找:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录原创 2022-01-01 17:08:14 · 221 阅读 · 0 评论