
算法刷题
文章平均质量分 57
坚持练题,奥里给
姚舜禹_12140
但求诗酒趁年华,不负荆棘不负梦
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 1184:公交站间的距离
环形公交路线上有n个站,按次序从0到n-1进行编号。我们已知每一对相邻公交站之间的距离,distance[i]表示编号为i的车站和编号为(i+1)%n的车站之间的距离。用len统计由起始公交站到终点公交站之间的距离。假设len为顺时针的走法,那么sum-len的值即为逆时针的走法。公交站0和1之间的距离是1或9,最小值是1。公交站0和2之间的距离是3或7,最小值是3。环线上的公交车都可以按顺时针和逆时针的方向行驶。用sum统计总的距离长度。...原创 2022-07-24 21:00:13 · 276 阅读 · 0 评论 -
玩转Leetcode里的加法题目
这几天刷题,碰到好几次关于加法的题目。这些题目包括:二进制求和、两数相加、链表相加、字符串相乘、数组形式的整数加法。所以今天就特意写一个关于加法的博客,做个小总结原创 2022-06-03 18:20:14 · 520 阅读 · 0 评论 -
Leetcode 202:快乐数
题目描述:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。示例 1:输入:n = 19输出:true解释:1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 10.原创 2022-04-22 16:12:01 · 291 阅读 · 0 评论 -
Leetcode之n数之和
目录1、两数之和2、两数之和Ⅱ:输入有序数组3、三数之和4、四数之和5、四数之和Ⅱ6、总结(1)HashMap(2)分治+HashMap(3)双指针(4)场景总结1、两数之和来源:Leetcode 1:两数之和题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复.原创 2022-04-14 16:14:28 · 1115 阅读 · 0 评论 -
数组中的逆序对
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod1000000007数据范围: 对于50%的数据size≤10^4对于100%的数据size≤10^5数组中所有数字的值满足0≤val≤1000000要求:空间复杂度 O(n),时间复杂度O(nlogn)输入描述:题目保证输入的数组中没有的相同的数字示例1输...原创 2022-04-02 16:24:18 · 265 阅读 · 0 评论 -
异或操作在编程题中的应用
目录一、异或操作介绍1、异或操作的运算规则2、异或操作的基本运算原则3、异或操作的应用二、编程题示例1、Leetcode 136:只出现一次的数字2、Leetcode 137:只出现一次的数字Ⅱ3、Leetcode 260:只出现一次的数字Ⅲ4、Leetccode 268:丢失的数字一、异或操作介绍1、异或操作的运算规则相同为0,不同为1。2、异或操作的基本运算原则0与任何数进行异或,结果都是任何数。 任何数与任何数异或,结果为0。 异或运算满原创 2022-03-02 22:03:02 · 789 阅读 · 0 评论 -
序列化找数
题目描述:从非负整数序列0, 1, 2, ..., n中给出包含其中n个数的子序列,请找出未出现在该子序列中的那个数。输入描述:输入为n+1个非负整数,用空格分开。其中:首个数字为非负整数序列的最大值n,后面n个数字为子序列中包含的数字。输出描述:输出为1个数字,即未出现在子序列中的那个数。示例1输入:3 3 0 1输出:2解法一:思路:1、将输入的数字存入list中。2、对list里面的元素进行排序。3、遍历list,当 i 小于li..原创 2022-03-01 20:14:38 · 132 阅读 · 0 评论 -
Leetcode 23:合并K个升序链表
题目描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:...原创 2022-02-05 18:51:07 · 150 阅读 · 0 评论 -
Leetcode 496:下一个更大元素Ⅰ
题目描述:nums1中数字x的 下一个更大元素 是指x在nums2 中对应位置 右侧 的 第一个 比x大的元素。给你两个 没有重复元素 的数组nums1 和nums2 ,下标从 0 开始计数,其中nums1是nums2的子集。对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是...原创 2022-01-25 16:06:22 · 215 阅读 · 0 评论 -
Leetcode 739:每日温度
题目描述:请根据每日 气温 列表 temperatures,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出:[1,1,1,0]示例 3:输入: temperatures = [30,60,9...原创 2022-01-25 12:43:08 · 464 阅读 · 0 评论 -
Leetcode 25:K个一组翻转链表
题目描述:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5] 示例 2:输入:head = [1,2,3,4,5.原创 2022-01-24 11:55:30 · 334 阅读 · 0 评论 -
Leetcode 20:有效的括号
题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = ".原创 2022-01-20 08:21:19 · 643 阅读 · 0 评论 -
leetcode 242:有效的字母异位符
题目描述:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false解法一:使用库函数思路:1、将字符串S和T转为数组。2、利用Arrays.sort()对字符数组进行排序。3原创 2022-01-18 19:29:06 · 443 阅读 · 0 评论 -
Leetcode 55:跳跃游戏
题目描述:给定一个非负整数数组nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是...原创 2021-09-06 11:56:28 · 782 阅读 · 0 评论 -
Leetcode 198:打家劫舍
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例原创 2021-09-03 16:55:57 · 122 阅读 · 0 评论 -
Leetcode 70:爬楼梯
题目描述:假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶这个题看似是爬楼梯,其...原创 2021-09-02 21:59:23 · 110 阅读 · 0 评论 -
Leetcode 1137:第N个泰波那契数
题目描述:泰波那契序列Tn定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数n,请返回第 n 个泰波那契数Tn 的值。示例 1:输入:n = 4输出:4解释:T_3 = 0 + 1 + 1 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:1389537解法一:带有备忘录的递归算法思路:递归会超时,因此...原创 2021-09-01 08:56:08 · 345 阅读 · 0 评论 -
Leetcode 509:斐波那契数
题目描述:斐波那契数,通常用F(n) 表示,形成的序列称为 斐波那契数列 。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。解法一:递归思路:斐波那契数列的数学形式就是递归,当前项的和等于前两项的数字之和。代码如下:class Solution { public int fib(int n)...原创 2021-08-31 10:50:16 · 305 阅读 · 0 评论 -
Leetcode 141:环形链表
题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:hea原创 2021-08-30 09:38:20 · 91 阅读 · 0 评论 -
Leetcode 88:合并两个有序数组
题目描述:给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入:num.原创 2021-08-28 23:16:34 · 467 阅读 · 0 评论 -
Leetcode 628:三个数的最大乘积
题目描述:给你一个整型数组nums,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入:nums = [1,2,3]输出:6示例 2:输入:nums = [1,2,3,4]输出:24示例 3:输入:nums = [-1,-2,-3]输出:-6解法一:排序解题思路:想要得到一个数组中三个数组成的最大乘积,就要找到数组中的三个最大数,但是还要考虑到数组中是否存在负数。因此,基于数组按升序排列的前提下,分为以下情况:(1)..原创 2021-08-27 22:06:19 · 310 阅读 · 0 评论 -
Leetcode 01:两数之和
题目描述:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums =...原创 2021-08-20 15:25:45 · 133 阅读 · 0 评论 -
Leetcode 866:回文素数
题目描述:求出大于或等于N的最小回文素数。回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。例如,2,3,5,7,11 以及13 是素数。回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。例如,12321 是回文数。示例 1:输入:6输出:7示例2:输入:8输出:11示例3:输入:13输出:101解题思路:这道题并不难理解,思路也很明确:分别找到素数和回文数即可。因此,大多数人的...原创 2021-08-08 11:05:30 · 502 阅读 · 0 评论 -
Leetcode 21:合并两个有序链表
题目描述:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]解法一:双指针思路:通过两个指针分别指向两个链表,然后逐次向后进行遍历,比较两个指针的大小。最后返回新链表即...原创 2021-08-07 10:17:31 · 106 阅读 · 0 评论 -
Leetcode 69:x的平方根
题目描述:实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去。解法一:暴力法思路:暴力法的思路很简单,就是从1开始遍历到x。(1)如果index的平方小于等于x,则继续遍历。(2)如果index平方大...原创 2021-08-03 10:19:43 · 241 阅读 · 0 评论 -
Leetcode 724:寻找数组的中心下标
题目描述:给你一个整数数组nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 sum.原创 2021-07-28 15:45:23 · 205 阅读 · 0 评论 -
Leetcode 06:Z字形变换
题目描述:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);...原创 2021-07-20 17:07:51 · 565 阅读 · 0 评论 -
Leetcode 05:最长回文子串
题目描述:给你一个字符串s,找到s中最长的回文子串。注:回文串就是正着读和反着读是一样的,例如:上海自来水来自海上。包括我们之前学习C语言的时候,也有回文数,如:12344321。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"解法一:暴力破解法。思路:暴力破...原创 2021-07-17 20:16:21 · 192 阅读 · 1 评论 -
LeetCode 206:反转链表
题目描述:给定一个单链表的头节点head,将链表反转,并将所得结果返回。示例1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]图示如下:示例2:输入:head = [1,2]输出:[2,1]图示如下:示例3:输入:head = []输出:[]解法一:双指针迭代法。思路:根据单链表的特点,对于任一节点而言,仅指向它的直接后继节点。因此,要想反转链表,就需要改变每个节点的next指向。如果仅使用一个...原创 2021-07-15 21:59:17 · 193 阅读 · 1 评论