算法训练(C语言版本)
文章平均质量分 78
算法训练,记录力扣刷题,思路,代码,未尽事宜
每日刷刷,记录,坚持就是胜利
mrbone9
文章不定时更新,都是自己学习过程的记录
没有水文都是干货
换了工作比较事多,更新放缓
展开
-
1207. 独一无二的出现次数
地址:力扣https://leetcode-cn.com/problems/unique-number-of-occurrences/题目:给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输..原创 2022-03-25 22:37:43 · 142 阅读 · 0 评论 -
2149. 按符号重排数组
地址:力扣https://leetcode-cn.com/problems/rearrange-array-elements-by-sign/题目:给你一个下标从 0 开始的整数数组 nums ,数组长度为 偶数 ,由数目相等的正整数和负整数组成。你需要 重排 nums 中的元素,使修改后的数组满足下述条件:任意连续 的两个整数 符号相反对于符号相同的所有整数,保留 它们在 nums 中的 顺序 。重排后数组以正整数开头。重排元素满足上述条件后,返回修改后的数组。示例 1.原创 2022-03-24 21:21:27 · 1683 阅读 · 0 评论 -
2164. 对奇偶下标分别排序
地址:力扣https://leetcode-cn.com/problems/sort-even-and-odd-indices-independently/题目:给你一个下标从 0 开始的整数数组 nums 。根据下述规则重排 nums 中的值:按 非递增 顺序排列 nums 奇数下标 上的所有值。举个例子,如果排序前 nums = [4,1,2,3] ,对奇数下标的值排序后变为 [4,3,2,1] 。奇数下标 1 和 3 的值按照非递增顺序重排。按 非递减 顺序排列 nums 偶数下标原创 2022-03-24 21:16:09 · 366 阅读 · 0 评论 -
2130. 链表最大孪生和
地址:力扣https://leetcode-cn.com/problems/maximum-twin-sum-of-a-linked-list/题目:在一个大小为n且 n为偶数 的链表中,对于0 <= i <= (n / 2) - 1的 i,第i个节点(下标从 0开始)的孪生节点为第(n-1-i)个节点 。比方说,n = 4那么节点0是节点 3的孪生节点,节点 1是节点 2的孪生节点。这是长度为 n = 4的链表中所有的孪生节点。孪生和定...原创 2022-03-24 21:11:54 · 1580 阅读 · 0 评论 -
1104. 二叉树寻路
地址:力扣https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree/题目:在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 labe.原创 2022-03-09 13:04:10 · 129 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
地址:力扣https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/题目:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], .原创 2022-03-12 20:59:16 · 97 阅读 · 0 评论 -
260. 只出现一次的数字 III
地址:力扣https://leetcode-cn.com/problems/single-number-iii/题目:给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nu.原创 2022-03-12 12:51:10 · 67 阅读 · 0 评论 -
521. 最长特殊序列 Ⅰ
地址:力扣https://leetcode-cn.com/problems/longest-uncommon-subsequence-i/题目:给你两个字符串a和b,请返回 这两个字符串中 最长的特殊序列的长度。如果不存在,则返回 -1。「最长特殊序列」定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。字符串s的子序列是在从s中删除任意数量的字符后可以获得的字符串。例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc...原创 2022-03-10 23:05:22 · 97 阅读 · 0 评论 -
1329. 将矩阵按对角线排序
地址:力扣https://leetcode-cn.com/problems/sort-the-matrix-diagonally/题目:矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。给你一个m * n的整数矩阵mat,请你将同一条 矩阵对角线 上的元素按升序排序后,返回排...原创 2022-03-08 16:04:35 · 980 阅读 · 0 评论 -
1557. 可以到达所有点的最少点数目
地址:力扣https://leetcode-cn.com/problems/minimum-number-of-vertices-to-reach-all-nodes/题目:给你一个 有向无环图, n个节点编号为 0到 n-1,以及一个边数组 edges,其中 edges[i] = [fromi, toi]表示一条从点fromi到点toi的有向边。找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。你可以以任意顺序返回这些节点编号。示例 1...原创 2022-03-06 16:21:22 · 283 阅读 · 0 评论 -
剑指 Offer II 045. 二叉树最底层最左边的值
地址:力扣https://leetcode-cn.com/problems/LwUNpT/题目:给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7提示:二叉树的节点个数的范围是[1,104] -2^31<= Node.val &..原创 2022-03-05 21:37:27 · 1413 阅读 · 0 评论 -
654. 最大二叉树
地址:力扣https://leetcode-cn.com/problems/maximum-binary-tree/题目:给定一个不重复的整数数组nums 。最大二叉树可以用下面的算法从nums 递归地构建:创建一个根节点,其值为nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值 右边 的子数组后缀上构建右子树。返回nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6...原创 2022-03-05 20:52:18 · 485 阅读 · 0 评论 -
859. 亲密字符串
地址:力扣https://leetcode-cn.com/problems/buddy-strings/题目:给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回true;否则返回 false 。交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。示例 1:...原创 2022-03-05 19:39:00 · 127 阅读 · 0 评论 -
112. 路径总和
地址:力扣https://leetcode-cn.com/problems/path-sum/题目:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1]原创 2022-03-05 18:30:08 · 495 阅读 · 0 评论 -
599. 两个列表的最小索引总和
地址:力扣https://leetcode-cn.com/problems/minimum-index-sum-of-two-lists/题目:假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。示例 1:输入: list1 = ["Shogun", "Tapioca Express原创 2022-03-05 13:33:57 · 323 阅读 · 0 评论 -
997. 找到小镇的法官
地址:力扣https://leetcode-cn.com/problems/find-the-town-judge/题目:小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性 1 和属性 2 。给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。如果小镇法官存原创 2022-03-03 20:43:31 · 97 阅读 · 0 评论 -
870. 优势洗牌
地址:力扣https://leetcode-cn.com/problems/advantage-shuffle/题目:给定两个大小相等的数组A和B,A 相对于 B 的优势可以用满足A[i] > B[i]的索引 i的数目来描述。返回A的任意排列,使其相对于 B的优势最大化。示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]示例 2:输入:A = [12,24,8,32], B = [...原创 2022-03-03 19:33:37 · 854 阅读 · 0 评论 -
649. Dota2 参议院
地址:力扣https://leetcode-cn.com/problems/dota2-senate/题目:Dota2 的世界里有两个阵营:Radiant(天辉)和Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利:...原创 2022-03-02 17:52:52 · 162 阅读 · 0 评论 -
337. 打家劫舍 III
地址:力扣https://leetcode-cn.com/problems/house-robber-iii/题目:小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。示例原创 2022-02-28 22:14:29 · 530 阅读 · 0 评论 -
面试题 16.04. 井字游戏
地址:力扣https://leetcode-cn.com/problems/tic-tac-toe-lcci/题目:设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" "代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角原创 2022-02-27 23:33:26 · 130 阅读 · 0 评论 -
799. 香槟塔
地址:力扣https://leetcode-cn.com/problems/champagne-tower/题目:我们把玻璃杯摆成金字塔的形状,其中第一层有 1 个玻璃杯, 第二层有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)例如,在...原创 2022-02-27 15:40:56 · 327 阅读 · 0 评论 -
486. 预测赢家
地址:力扣https://leetcode-cn.com/problems/predict-the-winner/题目:给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当原创 2022-02-27 12:40:29 · 3580 阅读 · 0 评论 -
剑指 Offer II 079. 所有子集
地址:力扣https://leetcode-cn.com/problems/TVdhkn/题目:给定一个整数数组nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 &..原创 2022-02-27 11:15:00 · 225 阅读 · 0 评论 -
877. 石子游戏
地址:力扣https://leetcode-cn.com/problems/stone-game/submissions/题目:Alice 和 Bob 用几堆石子在做游戏。一共有偶数堆石子,排成一行;每堆都有 正 整数颗石子,数目为 piles[i]。游戏以谁手中的石子最多来决出胜负。石子的 总数 是 奇数 ,所以没有平局。Alice 和 Bob 轮流进行,Alice 先开始 。 每回合,玩家从行的 开始 或 结束 处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中 石.原创 2022-02-24 16:43:16 · 3217 阅读 · 0 评论 -
547. 省份数量
地址:力扣https://leetcode-cn.com/problems/number-of-provinces/题目:有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而原创 2022-02-22 21:58:35 · 429 阅读 · 0 评论 -
铺满骨牌的方案
在学习动态规划时的入门练习题,没有找到具体题目,不过觉得推导过程不错,记录一下题目:在一个3 X N的长方形方格中,铺满1X2的骨牌(骨牌个数不限制),给定N求方案数。先降低一下难度,考虑 2 X N 的长方形方格比如:N=2 时方案数为 2如果是 N 的方案,怎么求?第 n 列,我们可以竖着放 1 个,也可以把 n - 1 列拿来,横着放 2 个骨牌长度=2,不会影响 n - 2 列,所以 n 列的方案等同于:n - 1 列 + 竖放1个,或者 n-2.原创 2022-02-22 00:01:20 · 601 阅读 · 0 评论 -
674. 最长连续递增序列
地址:力扣https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/题目:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums原创 2022-02-16 09:52:32 · 106 阅读 · 0 评论 -
111. 二叉树的最小深度
地址:力扣https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2:输入:root = [2,null,3,null,4,null,5,null,6] 输出:5原创 2022-02-15 21:05:35 · 312 阅读 · 0 评论 -
643. 子数组最大平均数 I
地址:力扣https://leetcode-cn.com/problems/maximum-average-subarray-i/题目:给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。任何误差小于 10-5 的答案都将被视为正确答案。示例 1:输入:nums = [1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+50)/4 =原创 2022-02-15 20:17:22 · 611 阅读 · 0 评论 -
740. 删除并获得点数
地址:力扣https://leetcode-cn.com/problems/delete-and-earn/题目:给你一个整数数组nums,你可以对它进行一些操作。每次操作中,选择任意一个nums[i],删除它并获得nums[i]的点数。之后,你必须删除 所有 等于nums[i] - 1 和 nums[i] + 1的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2] 输出:6 解释: ...原创 2022-02-14 11:18:00 · 512 阅读 · 0 评论 -
198. 打家劫舍
地址:力扣https://leetcode-cn.com/problems/house-robber/题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额原创 2022-02-14 10:43:42 · 82 阅读 · 0 评论 -
746. 使用最小花费爬楼梯
地址:力扣https://leetcode-cn.com/problems/min-cost-climbing-stairs/题目:给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开原创 2022-02-14 10:11:15 · 129 阅读 · 0 评论 -
861. 翻转矩阵后的得分
地址:力扣https://leetcode-cn.com/problems/score-after-flipping-matrix/题目:有一个二维矩阵A 其中每个元素的值为0或1。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,...原创 2022-02-13 17:07:33 · 151 阅读 · 0 评论 -
969. 煎饼排序
地址:力扣https://leetcode-cn.com/problems/pancake-sorting/题目:给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序。一次煎饼翻转的执行过程如下:选择一个整数 k ,1 <= k <= arr.length反转子数组 arr[0...k-1](下标从 0 开始)例如,arr = [3,2,1,4] ,选择 k = 3 进行一次煎饼翻转,反转子数组 [3,2,1] ,得到 arr = [1,2,3,4] 。以数原创 2022-02-12 22:28:23 · 409 阅读 · 1 评论 -
1605. 给定行和列的和求可行矩阵
地址:力扣https://leetcode-cn.com/problems/find-valid-matrix-given-row-and-column-sums/题目:给你两个非负整数数组rowSum 和colSum,其中rowSum[i]是二维矩阵中第 i行元素的和, colSum[j]是第 j列元素的和。换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。请找到大小为rowSum.length x colSum.length的任意 非负整数矩阵,且该矩阵...原创 2022-02-12 12:51:22 · 502 阅读 · 0 评论 -
807. 保持城市天际线
地址:力扣https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/题目:给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid ,其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。城市的 天际线 是从远处观察城市时,所有建筑物形成的外部轮廓。从东、南、西、北四个主要方向观测到的 天际线 可能不同。我们被允许为 .原创 2022-02-12 11:16:57 · 106 阅读 · 0 评论 -
1855. 下标对中的最大距离
地址:力扣https://leetcode-cn.com/problems/maximum-distance-between-a-pair-of-values/题目:给你两个 非递增 的整数数组 nums1 和 nums2 ,数组下标均 从 0 开始 计数。下标对 (i, j) 中 0 <= i < nums1.length 且 0 <= j < nums2.length 。如果该下标对同时满足 i <= j 且 nums1[i] <原创 2022-02-11 14:50:29 · 703 阅读 · 0 评论 -
剑指 Offer II 019. 最多删除一个字符得到回文
地址:力扣https://leetcode-cn.com/problems/RQku0D/题目:给定一个非空字符串s,请判断如果最多 从字符串中删除一个字符能否得到一个回文字符串。示例 1:输入: s = "aba" 输出: true 示例 2:输入: s = "abca" 输出: true 解释: 可以删除 "c" 字符 或者 "b" 字符 示例 3:输入: s = "abc" 输出: false 提示:1 <= s.l..原创 2022-02-11 00:16:00 · 342 阅读 · 0 评论 -
860. 柠檬水找零
地址:力扣https://leetcode-cn.com/problems/lemonade-change/题目:在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果..原创 2022-02-10 22:58:07 · 77 阅读 · 0 评论 -
409. 最长回文串
地址:力扣https://leetcode-cn.com/problems/longest-palindrome/题目:给定一个包含大写字母和小写字母的字符串s,返回通过这些字母构造成的 最长的回文串。在构造过程中,请注意 区分大小写 。比如"Aa"不能当做一个回文字符串。示例 1:输入:s = "abccccdd" 输出:7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 示例 2:输入:s = "a" ...原创 2022-02-10 16:38:00 · 182 阅读 · 0 评论