算法
文章平均质量分 88
分享日常学习算法笔记
一饭名厨姚鲲鲲
这个作者很懒,什么都没留下…
展开
-
【每日力扣43】位1的个数
一、题目[LeetCode-191]编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入原创 2022-04-02 18:38:36 · 113 阅读 · 0 评论 -
【每日力扣42】罗马数字转整数(模拟|哈希map)
一、题目[LeetCode-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, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数原创 2022-04-01 18:56:57 · 145 阅读 · 0 评论 -
【每日力扣41】计数质数
一、题目[LeetCode-204]统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0提示:0 <= n <= 5 * 10^6二、思路方法一:暴力法(两层嵌套for循环,一层计数O(n),一层判断O(√n))编写子方法isPrime()用于判断对于..原创 2022-03-30 18:06:18 · 1306 阅读 · 0 评论 -
【每日力扣39】最小栈[设计问题][栈]
一、题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。 pop()—— 删除栈顶的元素。 top()—— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,..原创 2022-03-27 17:49:40 · 162 阅读 · 0 评论 -
【每日力扣38】打乱数组[设计问题][数组]
一、题目[LeetCode-384]给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是等可能的。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象 int[] reset() 重设数组到它的初始状态并返回 int[] shuffle() 返回数组随机打乱后的结果示例 1:输入["Solution", "shuffle", "reset", "shuffle"][..原创 2022-03-20 23:55:50 · 988 阅读 · 0 评论 -
【每日力扣37】打家劫舍
一、题目[LeetCode-198]你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金...原创 2022-01-30 23:25:05 · 186 阅读 · 0 评论 -
【每日力扣36】最大子序和
一、题目[LeetCode-53]给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:1 <...原创 2022-01-29 23:44:06 · 668 阅读 · 0 评论 -
【每日力扣35】买卖股票的zui佳时机
一、题目[LeetCode-121]给定一个数组 prices,它的第i个元素prices[i]表示一支给定股票第 i天的价格。你只能选择 某一天买入这只股票,并选择在 未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大...原创 2022-01-28 21:47:30 · 103 阅读 · 0 评论 -
【每日力扣34】爬楼梯
一、题目[LeetCode-70]假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶提示:1 <= n <...原创 2022-01-27 23:56:10 · 282 阅读 · 0 评论 -
【每日力扣33】第一个错误的版本
一、题目[LeetCode-278]你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用bool isBadVersion(version)接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的..原创 2022-01-26 23:58:18 · 112 阅读 · 0 评论 -
【每日力扣32】合并两个有序数组
一、题目[LeetCode-88]给你两个按 非递减顺序排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例...原创 2022-01-25 23:09:51 · 312 阅读 · 0 评论 -
【每日力扣31】将有序数组转换为二叉搜索树
一、题目[LeetCode-108]给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1].原创 2022-01-24 23:37:43 · 564 阅读 · 0 评论 -
【每日力扣30】二叉树的层序遍历
一、题目[LeetCode-102]给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围[0, 2000]内 -1000 <= Node.val &l..原创 2022-01-23 23:26:50 · 1046 阅读 · 0 评论 -
【每日力扣29】对称二叉树
一、题目[LeetCode-101]给你一个二叉树的根节点root, 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1, 1000] 内 -100 <= Node.val <= 100进阶:你可以运用递归和迭代两种方法解决这个问题吗?二、思路观察题意知,一棵树为对...原创 2022-01-22 23:38:53 · 309 阅读 · 0 评论 -
【每日力扣28】验证二叉搜索树
一、题目[LeetCode-98]给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于当前节点的数。 节点的右子树只包含 大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true示例 2:输入:root = [5,1,4,null,null,3,6]输出:false解释:根节点的值是 5 ,但是右子节点的值是 4 。..原创 2022-01-21 23:47:12 · 905 阅读 · 0 评论 -
【每日力扣27】二叉树的最大深度
一、题目[LeetCode-104]给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度3 。二、思路递归对于树这一数据结构,递归法经常使用,因为递归可以用寥寥几行代码实现对整颗树的遍历。本题从根节点开始,对数进行先序遍历。对于一个树节点,depth先增加1,然后取对左子树递归和右子树递归得到的d...原创 2022-01-20 23:01:24 · 122 阅读 · 0 评论 -
【每日力扣26】环形链表
一、题目[LeetCode-141]给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head =.原创 2022-01-19 23:28:10 · 225 阅读 · 0 评论 -
【每日力扣25】回文链表
一、题目给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例 1:输入:head = [1,2,2,1]输出:true示例 2:输入:head = [1,2]输出:false提示:链表中节点数目在范围[1, 10^5] 内 0 <= Node.val <= 9进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?二、思路方法:创建反向一个反转链表...原创 2022-01-18 23:03:32 · 629 阅读 · 0 评论 -
【每日力扣24】合并两个有序链表
一、题目[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]提示:两个链表的节点数目范围是 [0, 50] -100 <= Node.val <...原创 2022-01-17 23:12:24 · 116 阅读 · 0 评论 -
【每日力扣23】反转链表
一、题目[LeetCode-206]给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000进阶:链表可以选用迭代或递归方式完成反转...原创 2022-01-17 10:21:05 · 151 阅读 · 0 评论 -
【每日力扣22】删除链表的倒数第N个节点
一、题目[LeetCode-19]给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100原创 2022-01-16 08:23:53 · 223 阅读 · 0 评论 -
【每日力扣21】删除链表中的节点
一、题目请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9示例 2:输入:head = [4,5,1,9], node = 1...原创 2022-01-14 23:57:27 · 138 阅读 · 0 评论 -
【每日力扣20】最长公共前缀
一、题目[LeetCode-14]编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:1 <= strs.length <= 200 0 <= strs[i].length <= ..原创 2022-01-13 10:58:10 · 359 阅读 · 0 评论 -
【每日力扣19】外观数列
一、题目[LeetCode-38]给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221...原创 2022-01-06 23:56:30 · 150 阅读 · 0 评论 -
【每日力扣18】实现strStr()
一、题目[LeetCode-28]实现strStr()函数。给你两个字符串haystack和 needle,请你在 haystack字符串中找出 needle字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当needle是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当needle是空字符串时我们应当返回 0 。这与 C 语言的strstr()以及 Java 的indexOf()定义相符。...原创 2022-01-05 00:09:29 · 403 阅读 · 0 评论 -
【每日力扣17】字符串转换整数 (atoi)
一、题目[LeetCode-8]请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前...原创 2022-01-04 00:05:49 · 802 阅读 · 0 评论 -
【每日力扣16】验证回文串
一、题目[LeetCode-125]给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 <= s.le原创 2022-01-02 22:18:54 · 1237 阅读 · 0 评论 -
【每日力扣15】有效的字母异位词
一、题目[LeetCode-242]给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若s 和 t中每个字符出现的次数都相同,则称s 和 t互为字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false提示:1 <= s.length, t.length <= 5 * 10^4...原创 2022-01-02 22:07:43 · 422 阅读 · 0 评论 -
【每日力扣14】字符串中的第一个唯一字符
一、题目给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = "leetcode"返回 0s = "loveleetcode"返回 2提示:你可以假定该字符串只包含小写字母。二、思路哈希map法依题意,需要存储两个变量,一个是s中出现的字符——char类型,一个是该字符的出现次数——int类型。然后按s中字符出现的顺序遍历,找到第一个的int值为1的字符即可返回。因此一个unodered_map<ch原创 2022-01-02 21:58:03 · 333 阅读 · 0 评论 -
【每日力扣13】整数反转
一、题目[LeetCode-7]给你一个 32位的有符号整数 x,返回将 x中的数字部分反转后的结果。如果反转后整数超过 32位的有符号整数的范围[−2^31, 2^31− 1],就返回0。假设环境不允许存储 64位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:...原创 2021-12-31 09:58:39 · 256 阅读 · 0 评论 -
【每日力扣12】反转字符串
一、题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]提示:1 <=.原创 2021-12-31 09:09:36 · 205 阅读 · 0 评论 -
【每日力扣11】旋转图像
一、题目给定一个 n×n的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]...原创 2021-12-30 11:45:52 · 1420 阅读 · 0 评论 -
【每日力扣10】有效的数独
一、题目请你判断一个9 x 9 的数独是否有效。只需要 根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用'.'表示。示例 1:输入:board =[["5","3",".",".","...原创 2021-12-24 00:01:58 · 592 阅读 · 0 评论 -
【每日力扣9】两数之和
一、题目给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = ...原创 2021-12-23 00:13:25 · 144 阅读 · 0 评论 -
【每日力扣8】移动零
一、题目给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入:[0,1,0,3,12]输出:[1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。二、思路双指针法涉及到数组元素的移动,首先考虑双指针,快指针先遍历,只要遍历到的元素nums[fast]不为0,那么便能加进慢指针当中。慢指针拷贝所有不为0的元素使其全部集中在nums[0,slow)区间段中。(双指针法的精髓...原创 2021-12-22 00:03:06 · 93 阅读 · 0 评论 -
【每日力扣7】加一
一、题目给定一个由 整数组成的 非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]...原创 2021-12-20 23:37:17 · 348 阅读 · 0 评论 -
【每日力扣6】两个数组的交集 II
一、题目给你两个整数数组nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]提示:1 <= nums1.length,.原创 2021-12-20 00:22:57 · 236 阅读 · 0 评论 -
【每日力扣5】只出现一次的数字
一、题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4二、思路(1)排序法基于昨天《是否存在重复元素》的启发,这里笔者首先想到可以先将数组排序,这里花费O(NlogN)的时间,然后根据题意,除了某个元素只出现一次以外,其余每个元素均.原创 2021-12-19 17:09:10 · 177 阅读 · 0 评论 -
【每日力扣4】存在重复元素
一、题目给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回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二、思路受上一期的启发,先考虑了只有一个元素的退化情况,写在前面。遍历数组中的每个元素num...原创 2021-12-19 16:11:30 · 204 阅读 · 0 评论 -
【每日力扣3】旋转数组
一、题目给你一个数组,将数组中的元素向右轮转 k个位置,其中k是非负数。示例 1:输入: 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]示例2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]...原创 2021-12-17 00:18:29 · 578 阅读 · 0 评论