![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝桥杯练习
诸葛思颖
这个作者很懒,什么都没留下…
展开
-
概率论——期望个数统计
一、题目描述某互联网公司一年一度的春招开始了,一共有 n 名面试者入选。每名面试者都会提交一份简历,公司会根据提供的简历资料产生一个预估的能力值,数值越大代表越有可能通过面试。小 A 和小 B 负责审核面试者,他们均有所有面试者的简历,并且将各自根据面试者能力值从大到小的顺序浏览。由于简历事先被打乱过,能力值相同的简历的出现顺序是从它们的全排列中等可能地取一个。现在给定 n 名面试者的能力值 scores,设 X 代表小 A 和小 B 的浏览顺序中出现在同一位置的简历数,求 X 的期望。提示:离散的非原创 2022-03-29 17:00:30 · 433 阅读 · 0 评论 -
博弈——除数博弈
一、题目描述爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 n 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < n 且 n % x == 0 。用 n - x 替换黑板上的数字 n 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 true 。假设两个玩家都以最佳状态参与游戏。二、C语言程序bool divisorGame(int n){ if(n % 2 == 0)原创 2022-03-29 16:22:10 · 3530 阅读 · 0 评论 -
博弈——Nim 游戏
一、题目描述你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合, 你作为先手 。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。二、C语言程序bool canWinNim(int n){ if(n % 4) return true; else原创 2022-03-29 15:26:07 · 3441 阅读 · 0 评论 -
数论——分式化简
一、题目描述有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?连分数是形如上图的分式。在本题中,所有系数都是大于等于0的整数。输入的cont代表连分数的系数(cont[0]代表上图的a0,以此类推)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。C语言代码/** * Note: The returned array must be malloced, assume caller calls free(). */// 约分原创 2022-03-29 11:34:26 · 171 阅读 · 0 评论 -
图论——传递信息
一、问题描述小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编原创 2022-03-23 21:54:56 · 181 阅读 · 0 评论 -
图论——找到小镇的法官
一、问题描述小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性 1 和属性 2 。给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1 。二、C语言代码int findJudge(int n,原创 2022-03-23 21:27:22 · 1611 阅读 · 0 评论 -
动态规划——买卖股票的最佳时机
一、题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。二、C语言代码int maxindex = 0;int minindex = 0;int maxProfit(int* prices, int pricesSize){ if(p原创 2022-03-07 22:50:44 · 199 阅读 · 0 评论 -
动态规划——爬楼梯
一、题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?二、C语言代码原创 2022-03-07 20:12:36 · 330 阅读 · 0 评论 -
贪心——分割平衡字符串
一、题目描述在一个 平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。返回可以通过分割得到的平衡字符串的 最大数量 。二、C语言代码int balancedStringSplit(char * s){ int ret = 0; int flag = 0; // 遇到一个L加1,遇到一个R减1,当为0时表示平衡 i原创 2022-03-05 20:46:33 · 460 阅读 · 0 评论 -
贪心——分发饼干
一、题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。二、C语言代码void mergeSort(int *nums, int numsSize){ if(numsSi原创 2022-03-05 20:37:56 · 667 阅读 · 0 评论 -
计数——赎金信
一、问题描述给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。二、C语言代码bool canConstruct(char * ransomNote, char * magazine){ int letters[26] = {0}; int mLenth = strlen(ma原创 2022-03-05 11:28:32 · 268 阅读 · 0 评论 -
计数——字符串中的第一个唯一字符
一、题目描述给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。二、C语言代码int firstUniqChar(char * s){ int lenth = strlen(s); int ret = -1; int letters[26] = {0}; // 统计字母出现次数的数组 for(int i = 0; i < lenth; i++){ int index = s[i] - 'a';原创 2022-03-05 11:20:11 · 152 阅读 · 0 评论 -
广度优先搜索——二叉树的最大深度
一、题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。二、C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */int maxDepth(struct TreeNode* root){ if原创 2022-03-05 10:37:30 · 244 阅读 · 0 评论 -
广度优先搜索——对称二叉树
一、题目描述给你一个二叉树的根节点 root , 检查它是否轴对称。二、C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */// judge if the node l is same as node rbool isSame(struct原创 2022-03-05 10:31:38 · 228 阅读 · 0 评论 -
深度优先搜索——翻转二叉树
一、题目描述给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */// turn the tree p// note: p is not NULLvoid turnTree(原创 2022-03-03 22:31:24 · 211 阅读 · 0 评论 -
深度优先搜索——二叉树的直径
一、题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。二、C语言代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */// find the longest lent原创 2022-03-03 19:54:05 · 142 阅读 · 0 评论 -
十大排序算法动图图示及C语言程序
选择排序原创 2022-02-06 21:12:22 · 916 阅读 · 0 评论 -
排序——有多少小于当前数字的数字
一、题目描述给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。二、C语言代码/** * Note: The returned array must be malloced, assume caller calls free(). */int* smallerNumbersThanC原创 2022-02-05 21:48:56 · 128 阅读 · 0 评论 -
排序——使每位学生都有座位的最少移动次数
一、问题描述一个房间里有 n 个座位和 n 名学生,房间用一个数轴表示。给你一个长度为 n 的数组 seats ,其中 seats[i] 是第 i 个座位的位置。同时给你一个长度为 n 的数组 students ,其中 students[j] 是第 j 位学生的位置。你可以执行以下操作任意次:增加或者减少第 i 位学生的位置,每次变化量为 1 (也就是将第 i 位学生从位置 x 移动到 x + 1 或者 x - 1)请你返回使所有学生都有座位坐的 最少移动次数 ,并确保没有两位学生的座位相同。请注原创 2022-02-05 20:55:16 · 289 阅读 · 0 评论 -
排序——两个数对之间的最大乘积差
一、问题描述两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) 。例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 * 6) - (2 * 7) = 16 。给你一个整数数组 nums ,选出四个 不同的 下标 w、x、y 和 z ,使数对 (nums[w], nums[x]) 和 (nums[y], nums[z]) 之间的 乘积差 取到 最大值 。返回以这种方式取得的乘积差中的 最大值 。二、C语言代码int maxProduct原创 2022-02-05 20:37:08 · 606 阅读 · 0 评论 -
排序——合并两个有序数组
一、问题描述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。二、C语言代码void merge原创 2022-02-05 20:28:47 · 870 阅读 · 0 评论 -
排序——找出数组排序后的目标下标
一、题目描述给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。目标下标 是一个满足 nums[i] == target 的下标 i 。将 nums 按 非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按 递增 顺序排列。二、C语言代码/** * Note: The returned array must be malloced, assume caller calls free(). */int原创 2022-02-05 19:45:40 · 817 阅读 · 0 评论 -
枚举——重复至少 K 次且长度为 M 的模式
一、题目描述给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式。模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。如果数组中存在至少重复 k 次且长度为 m 的模式,则返回 true ,否则返回 false 。二、代码/*思路:首先枚举所有长度为k*M的连续的子数列,依次判断是否为规定的模式*/bool containsPattern(int* arr, int arrSize, int m,原创 2022-01-25 18:01:52 · 253 阅读 · 0 评论 -
枚举——统计好三元组
一、题目描述给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。0 <= i < j < k < arr.length|arr[i] - arr[j]| <= a|arr[j] - arr[k]| <= b|arr[i] - arr[k]| <= c其中 |x| 表示 x 的绝对值。二、代码/*思路:从原创 2022-01-25 17:31:47 · 550 阅读 · 0 评论 -
枚举——重新排序得到 2 的幂
题目描述给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。代码// 思路: // 枚举找到N的所有排序// 计算出N的位数c// 先用一个c维数组num容纳N中的n个数字// 在用一个c维数组isused表示数字是否被使用// 从前往后在num中选一个非0的数字作为序列的开头,将isused对应位置置为1// 再原创 2022-01-25 17:10:16 · 267 阅读 · 0 评论 -
枚举——数组中的最长山脉
一、问题描述把符合下列属性的数组 arr 称为 山脉数组 :arr.length >= 3存在下标 i(0 < i < arr.length - 1),满足arr[0] < arr[1] < … < arr[i - 1] < arr[i]arr[i] > arr[i + 1] > … > arr[arr.length - 1]给出一个整数数组 arr,返回最长山脉子数组的长度。如果不存在山脉子数组,返回 0 。原创 2022-01-25 14:12:18 · 286 阅读 · 0 评论 -
枚举——给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?
一、题目描述给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?二、代码// 思路:i从1到N依次尝试,// 对于每个i,一次尝试每个以i开头的连续正整数,直道和大于等于N// 如果等于N,则计数器加1;否则不做处理int consecutiveNumbersSum(int n){ int count = 0; for(int i = 1; i <= n; i++){ int sum = i; int j = i原创 2022-01-24 22:13:36 · 1641 阅读 · 0 评论 -
枚举——统计所有小于非负整数 n 的质数的数量
C语言,使用厄拉多塞筛法解决枚举问题转载 2022-01-19 21:15:29 · 1041 阅读 · 0 评论