
LeetCode
文章平均质量分 82
收集整理LeetCode数据结构与算法刷题集锦,分享诸多的经典算法题目,以及解题技巧的详细讲解、思路分析以及算法的示例展示,快速掌握算法的诸多技巧和提升算法的实战能力,提升自己自我的逻辑思维!
╰つ栺尖篴夢ゞ
本人毕业于计算机技术专业,从事iOS高级开发,专注于iOS/MacOS内核/汇编/源码/架构/算法等相关技术的开发学习,同时热爱人工智能、OpenGL/ES、云原生等技术,CSDN博客专家与原力计划作者,华为云云享专家与特约博主,阿里云专家博主,荣获CSDN iOS领域优质创作者、2022年度博客之星移动领域TOP 3、2022年度博客之星TOP 16、AI创想秀邂逅“华为云ModelArts”征文大赛一等奖、CSDN第一届猿创征文优质博文奖,以及多项优秀TOP博文、CSDN开源挑战赛优秀奖等。
展开
-
【数据结构与算法】之判断字符是否唯一
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。一、题目要求示例 一: 输入: s = "leetcode" 输出: false 示例 二: 输入: s = "abc" 输出: true限制: 0 <= len(s) <= 100二、 算法示例实现示例:遍历字符串,每次遍历去除首字母,然后查询剩余字符串里是否有去除掉的这个首字母; func isUnique(_ astr: String) -> Bool { var原创 2020-09-16 23:22:26 · 375 阅读 · 0 评论 -
【数据结构与算法】之判断是否互为字符重排
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。一、题目要求示例一: 输入: s1 = "abc", s2 = "bca" 输出: true 示例二: 输入: s1 = "abc", s2 = "bad" 输出: false说明: 0 <= len(s1) <= 100 0 <= len(s2) <= 100二、算法示例先重排,再比较Swift func CheckPermutat原创 2020-09-17 00:15:12 · 443 阅读 · 1 评论 -
【数据结构与算法】之N个数中有K个数可能的组合算法
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。一、题目要求 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]二、算法示例Swift var res = [[Int]]() func bt(_ n:Int, _ count:Int, _ t:[Int]){ let tLen = t.count if tLe原创 2020-09-17 00:42:23 · 884 阅读 · 0 评论 -
【数据结构与算法】之电话号码键盘的字母组合算法
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。一、题目要求给出数字到字母的映射如下(与电话按键相同)。注意: 1 不对应任何字母。示例如下: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。二、算法示例思路解决这个问题的思路比较简单,字符串每一个数字对于有多种字母, 比如 2 对应: abc 3原创 2020-09-18 00:05:45 · 403 阅读 · 0 评论 -
【数据结构与算法】之容器盛最多水的算法实现
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:不能倾斜容器,且 n 的值至少为 2。一、题目要求图中垂直线代表输入数组 [1, 8, 6, 2, 5, 4, 8, 3, 7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 输入:[1,8,6,2,5,4,8,3,7]原创 2020-09-21 18:06:16 · 299 阅读 · 0 评论 -
【数据结构与算法】之判断一个整数是否是 4 的幂次方的高逼格算法
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。一、题目要求示例一: 输入: 16 输出: true示例二: 输入: 5 输出: false进阶:你能不使用循环或者递归来完成本题算法吗?二、算法示例...原创 2020-09-24 23:53:02 · 585 阅读 · 0 评论 -
【数据结构与算法】之有序数组中的单一元素的算法
一、题目要求给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例一: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2示例二: 输入: [3,3,7,7,10,11,11] 输出: 10注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行。二、示例算法① 暴力法:线性搜索可以使用线性搜索来检查数组中的每个元素,直到找到单个元素。算法:从第一个元素开始,检查每个第二个元素是否与当前元素相同原创 2020-09-28 17:23:21 · 510 阅读 · 1 评论 -
【数据结构与算法】之柱状图中最大矩形的求解思路和算法示例
一、题目要求给定 n 个非负整数,用来表示柱状图中各个柱子的高度,并且每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以下是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。如下:示例: 输入: [2,1,5,6,2,3] 输出: 10二、示例算法解题思路为什么要找左右两边高度大于当前遍历的高度的下标?因为只有高度大于当前高度,面积才有可能更大,原创 2020-10-04 00:08:41 · 1496 阅读 · 3 评论 -
【数据结构与算法】之有关“跳跃游戏”的求解思路与示例算法
一、跳跃游戏 I① 题目要求给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例一: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例二: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不原创 2020-10-24 00:13:13 · 398 阅读 · 0 评论 -
【数据结构与算法】之连通网络的操作次数的算法
一、题目要求用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回 -1 。示例一:原创 2020-10-24 22:32:47 · 551 阅读 · 3 评论 -
【数据结构与算法】之给Nx3网格图涂色的方案数的求解算法
一、题目要求你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。给你网格图的行数 n ,请返回给 grid 涂色的方案数。由于答案可能会非常大,请返回答案对 109 + 7 取余的结果。示例一: 输入:n = 1 输出:12 解释:总共有 12 种可行的方法示例二: 输入:n = 2 输出:54示例三: 输入:n = 3 输出:246示例四:原创 2020-10-28 22:53:00 · 969 阅读 · 0 评论 -
【数据结构与算法】之“接雨水”的算法求解
题目要求给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height = [4,2,0,3,2,5] 输出:9提示:n == height.length0 &l原创 2020-11-30 20:08:15 · 541 阅读 · 0 评论 -
【数据结构与算法】之重复的DNA序列的算法求解
一、题目要求所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例一: 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出:["AAAAACCCCC","CCCCCAAAAA"]示例二: 输入:s = "AAAAA原创 2020-12-27 04:48:31 · 765 阅读 · 0 评论 -
【数据结构与算法】之旋转图像的求解算法
一、题目描述给定一个 n × n 的二维矩阵 matrix 表示一个图像,请将图像顺时针旋转 90 度。必须在原地旋转图像,这意味着需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例一: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]]示例二: 输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] 输出:[[15,原创 2021-08-02 20:22:46 · 3956 阅读 · 0 评论 -
【数据结构与算法】之深入解析如何确定单链表有环并求环的入口和长度
一、检测单链表中存在环① 环的定义单链表中结点都是一个结点指向下一个结点这样一个一个链接起来的,直到尾结点的指针域没有指向,单链表就到此结束。链表有环的定义是,链表的尾结点的指针域并为空,指向了链接中间的某个结点,这样就形成环,遍历单链表就会死循环,这是因为破坏了结束条件。如下所示:如果单链表有环,则在遍历时,在通过结点 J 之后,会重新回到结点 D:② 快慢指针检测设两个工作指针,一个快一个慢,如果有环的话,它们会必然在某点相遇。算法的思想是:设定使用两个指针,fast 与 slow原创 2021-08-19 13:23:08 · 5479 阅读 · 3 评论 -
【数据结构与算法】之深入解析“复制带随机指针的链表”的求解思路与算法示例
一、题目① 题目描述给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝,深拷贝应该正好由 n 个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random -> Y原创 2021-08-25 16:08:19 · 6654 阅读 · 0 评论 -
【数据结构与算法】之深入解析“打家劫舍”的求解思路与算法示例
假设你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。一、题目要求示例一 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。原创 2020-09-19 01:38:24 · 573 阅读 · 6 评论 -
【数据结构与算法】之深入解析“打家劫舍II”的求解思路与算法示例
一、题目要求你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金,这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他原创 2022-03-02 18:36:29 · 687 阅读 · 0 评论 -
【数据结构与算法】之深入解析“打家劫舍III”的求解思路与算法示例
一、题目要求小偷又发现了一个新的可行窃的地区,这个地区只有一个入口,我们称之为 root。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。给定二叉树的 root,返回在不触动警报的情况下,小偷能够盗取的最高金额。示例 1:输入: root = [3,2,3,null,3,null,1]输出: 7 解释: 小偷一晚能够盗取的最高金额 3 +原创 2022-03-02 19:02:17 · 695 阅读 · 0 评论 -
【数据结构与算法】之深入解析“N个数全排列”的求解思路与算法示例
一、全排列 I① 题目描述给定一个不含重复数字,数组长度为 N 的数组 nums ,返回其所有可能的全排列,可以按任意顺序返回结果。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]② 算法分析采用分治法把大问题分解成很多的子问题。大问题是所原创 2021-10-28 20:24:36 · 1350 阅读 · 0 评论 -
【数据结构与算法】之深入解析“汉诺塔问题”的求解思路与算法示例
一、题目描述有 A,B,C 三根柱子,A 上面有 n 个盘子,想把 A 上面的盘子移动到 C 上,但是要满足以下三个条件:每次只能移动一个盘子;盘子只能从柱子顶端滑出移到下一根柱子;盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。需要原地修改栈。示例 1:输入:A = [2, 1, 0], B = [], C = []输出:C = [2, 1, 0]示例 2:输入:A = [1, 0], B = [], C =原创 2021-10-28 20:50:18 · 997 阅读 · 4 评论 -
【数据结构与算法】之深入解析“整数转罗马数字”的求解思路与算法示例
一、题目描述罗马数字包含以下七种字符: 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 +原创 2021-12-21 20:26:30 · 491 阅读 · 0 评论 -
【数据结构与算法】之深入解析“罗马数字转整数”的求解思路与算法示例
一、题目描述罗马数字包含以下七种字符: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-12-21 20:52:08 · 539 阅读 · 0 评论 -
【数据结构与算法】之深入解析“合并两个有序数组”的求解思路与算法示例
一、题目描述给你两个按“非递减顺序”排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目,请合并 nums2 到 nums1 中,使合并后的数组同样按“非递减顺序”排列。注意:最终合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略,nums2 的长度为 n 。示例 1:输入:nums1 = [1,2原创 2021-12-22 20:56:53 · 1364 阅读 · 0 评论 -
【数据结构与算法】之深入解析“最优运动员比拼回合”的求解思路与算法示例
一、题目描述n 名运动员参与一场锦标赛,所有运动员站成一排,并根据最开始的站位从 1 到 n 编号(运动员 1 是这一排中的第一个运动员,运动员 2 是第二个运动员,依此类推)。锦标赛由多个回合组成(从回合 1 开始),每一回合中,这一排从前往后数的第 i 名运动员需要与从后往前数的第 i 名运动员比拼,获胜者将会进入下一回合,如果当前回合中运动员数目为奇数,那么中间那位运动员将轮空晋级下一回合。例如,当前回合中,运动员 1, 2, 4, 6, 7 站成一排:运动员 1 需要和运动员 7 比拼原创 2021-12-23 18:45:51 · 1054 阅读 · 0 评论 -
【数据结构与算法】之深入解析“预测赢家”的求解思路与算法示例
一、题目描述给出一个整数数组 nums,玩家 1 和玩家 2 基于这个数组设计了一个游戏。玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0,每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 ),玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。如果玩家 1 能成为赢家,返回 true;如果两个玩家得分相等,同样认为玩家 1 是游戏原创 2021-12-23 19:55:56 · 926 阅读 · 0 评论 -
【数据结构与算法】之深入解析“石子游戏”的求解思路与算法示例
一、题目描述Alice 和 Bob 用几堆石子在做游戏,一共有偶数堆石子,排成一行;每堆都有正整数颗石子,数目为 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的 总数 是 奇数 ,所以没有平局。Alice 和 Bob 轮流进行,Alice 先开始,每回合玩家从行的开始或结束处取走整堆石头,这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜 。假设 Alice 和 Bob 都发挥出最佳水平,当 Alice 赢得比赛时返回 true ,当 Bob 赢得比赛时返回 fals原创 2021-12-24 22:44:05 · 1338 阅读 · 2 评论 -
【数据结构与算法】之深入解析“石子游戏II”的求解思路与算法示例
一、题目描述亚历克斯和李继续他们的石子游戏,许多堆石子 排成一行,每堆都有正整数颗石子 piles[i],游戏以谁手中的石子最多来决出胜负。亚历克斯和李轮流进行,亚历克斯先开始,最初,M = 1。在每个玩家的回合中,该玩家可以拿走剩下的 前 X 堆的所有石子,其中 1 <= X <= 2M;然后,令 M = max(M, X),游戏一直持续到所有石子都被拿走。假设亚历克斯和李都发挥出最佳水平,返回亚历克斯可以得到的最大数量的石头。示例:输入:piles = [2,7,9,4,4]原创 2021-12-26 21:48:07 · 1948 阅读 · 0 评论 -
【数据结构与算法】之深入解析“石子游戏III”的求解思路与算法示例
一、题目要求Alice 和 Bob 用几堆石子在做游戏。几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出。Alice 和 Bob 轮流取石子,Alice 总是先开始,在每个玩家的回合中,该玩家可以拿走剩下石子中的的前 1、2 或 3 堆石子,比赛一直持续到所有石头都被拿走。每个玩家的最终得分为他所拿到的每堆石子的对应得分之和,每个玩家的初始分数都是 0,比赛的目标是决出最高分,得分最高的选手将会赢得比赛,比赛也可能会出现平局。假设 Alice 和 Bob 都采取最优策略原创 2021-12-27 20:18:33 · 1324 阅读 · 0 评论 -
【数据结构与算法】之深入解析“石子游戏IV”的求解思路与算法示例
一、题目要求Alice 和 Bob 两个人轮流玩一个游戏,Alice 先手。一开始,有 n 个石子堆在一起,每个人轮流操作,正在操作的玩家可以从石子堆里拿走任意非零平方数个石子。如果石子堆里没有石子了,则无法操作的玩家输掉游戏。给你正整数 n ,且已知两个人都采取最优策略,如果 Alice 会赢得比赛,那么返回 True ,否则返回 False。示例 1:输入:n = 1输出:true解释:Alice 拿走 1 个石子并赢得胜利,因为 Bob 无法进行任何操作。示例 2:输入:原创 2021-12-27 20:48:33 · 1535 阅读 · 0 评论 -
【数据结构与算法】之深入解析“石子游戏V”的求解思路与算法示例
一、题目描述几块石子排成一行,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出。游戏中的每一轮:Alice 会将这行石子分成两个非空行(即左侧行和右侧行);Bob 负责计算每一行的值,即此行中所有石子的值的总和。Bob 会丢弃值最大的行,Alice 的得分为剩下那行的值(每轮累加)。如果两行的值相等,Bob 让 Alice 决定丢弃哪一行,下一轮从剩下的那一行开始。只剩下一块石子时,游戏结束,Alice 的分数最初为 0 。返回 Alice 能够获得的最大分数。示例 1:原创 2022-01-02 02:24:50 · 661 阅读 · 1 评论 -
【数据结构与算法】之深入解析“石子游戏VI”的求解思路与算法示例
一、题目要求Alice 和 Bob 轮流玩一个游戏,Alice 先手,一堆石子里总共有 n 个石子,轮到某个玩家时,他可以移出一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有不一样的的评判标准,双方都知道对方的评判标准。给你两个长度为 n 的整数数组 aliceValues 和 bobValues,aliceValues[i] 和 bobValues[i] 分别表示 Alice 和 Bob 认为第 i 个石子的价值。所有石子都被取完后,得分较高的人为胜者,如果两个玩家得分相同,那么原创 2022-01-02 02:55:19 · 2044 阅读 · 4 评论 -
【数据结构与算法】之深入解析“石子游戏VII”的求解思路与算法示例
一、题目描述石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。有 n 块石子排成一排,每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 和 相等的得分。当没有石头可移除时,得分较高者获胜。鲍勃发现他总是输掉游戏(可怜的鲍勃,他总是输),所以他决定尽力 减小得分的差值 。爱丽丝的目标是最大限度地 扩大得分的差值。给你一个整数数组 stones ,其中 stones[i] 表示从左边开始的第 i 个石头的值,如果爱丽丝和鲍勃都发挥出最佳水平 ,请返回原创 2022-01-03 03:13:38 · 3003 阅读 · 3 评论 -
【数据结构与算法】之深入解析“石子游戏VIII”的求解思路与算法示例
一、题目描述Alice 和 Bob 玩一个游戏,两人轮流操作, Alice 先手,总共有 n 个石子排成一行。轮到某个玩家的回合时,如果石子的数目 大于 1 ,他将执行以下操作:选择一个整数 x > 1 ,并且 移除 最左边的 x 个石子;将移除的石子价值之和累加到该玩家的分数中;将一个新的石子放在最左边,且新石子的值为被移除石子值之和;当只剩下一个石子时,游戏结束。Alice 和 Bob 的 分数之差 为 (Alice 的分数 - Bob 的分数) ,Alic原创 2022-01-03 14:02:44 · 3423 阅读 · 3 评论 -
【数据结构与算法】之深入解析“石子游戏IX”的求解思路与算法示例
一、题目描述Alice 和 Bob 再次设计了一款新的石子游戏,现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值,给你一个整数数组 stones ,其中 stones[i] 是第 i 个石子的价值。Alice 和 Bob 轮流进行自己的回合,Alice 先手,每一回合,玩家需要从 stones 中移除任一石子。如果玩家移除石子后,导致所有已移除石子的价值总和可以被 3 整除,那么该玩家就输掉游戏;如果不满足上一条,且移除后没有任何剩余的石子,那么 Bob 将会直接获胜(即便原创 2022-01-03 19:40:30 · 3815 阅读 · 14 评论 -
【数据结构与算法】之深入解析“整数反转”的求解思路与算法示例
亲爱的小伙伴们:你们好!仅以此文作为 2021 年终总结,顺便跟大家分享一些我的心得经验,希望你我和 CSDN 都越来越好。翻开 2021 CSDN 年度回忆录,有种难以言喻的感觉,有过兴奋、有过开心、有过遗憾,更多的是有过收获。我收获了 14000+ 位粉丝;我成功上榜过 100 多次;我的文章被 2000 多位用户收藏;我收获了 1000 多个赞我收获了 1000 多条评论;唯有双向奔赴,爱才有意义。在这一年里,我有 333 个日日夜夜都在 CSDN,写了 333 篇原创博客博文;每一篇原创 2021-12-29 15:49:12 · 1137 阅读 · 10 评论 -
【数据结构与算法】之深入解析“螺旋矩阵”的求解思路与算法示例
一、题目要求给你一个 m 行 n 列的矩阵 matrix ,请按照顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matrix原创 2022-01-04 19:39:26 · 1245 阅读 · 0 评论 -
【数据结构与算法】之深入解析“螺旋矩阵II”的求解思路与算法示例
一、题目要求给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]二、求解算法① 模拟法:设定边界生成一个 n×n 空矩阵 mat,随后模拟整个向内环绕的填入过程:定义当前左右上下边界 l,r,t,b,初始值 num = 1,迭代终止值 tar = n * n;原创 2022-01-04 21:32:41 · 991 阅读 · 2 评论 -
【数据结构与算法】之深入解析“组合总和”的求解思路与算法示例
一、题目要求给你一个无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有不同组合 ,并以列表形式返回,可以按任意顺序返回这些组合。candidates 中的同一个数字可以无限制重复被选取,如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7], target = 7输出:原创 2022-01-09 22:38:57 · 791 阅读 · 0 评论 -
【数据结构与算法】之深入解析“组合总和II”的求解思路与算法示例
一、题目要求给你一个由候选元素组成的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个元素在每个组合中只能使用一次 。注意:解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]示例 2:输入: candidates = [2,原创 2022-01-10 14:00:29 · 706 阅读 · 0 评论