- 博客(49)
- 收藏
- 关注
原创 算法竞赛入门经典 第二章习题
2-1 水仙花数#include <bits/stdc++.h>using namespace std;int main() { for (int i = 100; i < 1000; i++) { int n = i / 100; int m = (i / 10) % 10; int k = i % 10; if (n * n * n + m * m * m + k * k * k == i) { printf("%d\n", i); } } re
2021-12-26 11:16:29 378
翻译 452. 用最少数量的箭引爆气球
问题描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆
2021-11-16 20:05:28 154
翻译 605. 种花问题
题目描述假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。输入输出示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2: 输入:flowerbed
2021-11-16 18:57:48 169
翻译 162. 寻找峰值
问题描述峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。输入输出示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2: 输入:nums = [1,2,1,3,5,6,4]输出
2021-09-15 15:10:02 104
转载 524. 通过删除字母匹配到字典里最长单词
问题描述给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。输入输出示例 1: 输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"]输出:"apple"示例 2: 输入:s = "abpcplea", dictionary = ["a","
2021-09-14 20:00:47 61
原创 447. 回旋镖的数量
问题描述给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。输入输出示例 1:输入:points = [[0,0],[1,0],[2,0]]输出:2解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]示例 2:输入:points
2021-09-13 19:21:45 83
原创 678. 有效的括号字符串
问题描述给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。* 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。输入输出:示例 1:输入: "()"输出: True示例 2:输入: "(*)"输出: True示例 3: 输入: "(*))
2021-09-12 11:06:48 55
原创 0001 两数之和
问题描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入输出示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2
2021-09-11 18:24:10 64
原创 1894. 找到需要补充粉笔的学生编号
问题描述一个班级里有 n 个学生,编号为 0 到 n - 1 。每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复这个过程,重新从编号为 0 的学生开始回答问题。给你一个长度为 n 且下标从 0 开始的整数数组 chalk 和一个整数 k 。一开始粉笔盒里总共有 k 支粉笔。当编号为 i 的学生回答问题时,他会消耗 chalk[i] 支粉笔。如果剩余粉笔数量 严格小于 chalk[i] ,那么学生 i 需要 补充 粉笔。
2021-09-10 15:52:05 66
原创 第4章 函数和递归
例题4-2 组合数#include <stdio.h>//组合数 //long long 阶乘数较大 long long factorial(int n){ long long m = 1; for(int i = 1; i <= n; i++){ m *= i; } return m;}long long C(int n, int m){ return factorial(n)/(factorial(m)*factorial(n-m));}//组合数优化
2021-08-13 16:20:39 54
原创 第三章 字符数组
蛇形数组#include <stdio.h>#include<string.h>#define maxn 20int a[maxn][maxn];int main(){ //x,y横纵坐标 int n, x, y, tot = 0; scanf("%d", &n); memset(a, 0, sizeof(a)); //定初始位置 tot = a[x=0][y=n-1] = 1; //填充n*n-1个数字 while(tot < n*
2021-08-09 20:55:05 82
翻译 523. 连续的子数组和
问题描述笔记1. 同余定理: a % m == b % m --> (a-b)%m == 0 --> m是(a-b)的整倍数 5 % 2 == 3 % 2 (5-3) % 2 == 0 一倍2. 再加上前缀和 前5项和 - 前2项和 = 第3-5和 s[4] - s[1] = a[2]+a[3]+a[4]代码class Solution{public: bool checkSubarraySum(vector<int&
2021-06-02 19:31:46 72
翻译 342. 4的幂
问题描述笔记一、x 是否是 n 的倍数和幂次方: 1. x % (n-1)== 1 --> 幂次方 16 % 3 == 1 2. x % (n-1) != 1 --> 倍数 8 % 3 == 2二、特殊 0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0) 0x55555555 = 1010101010101010101010101010101 (偶数位为0,奇数位为1) 0x33
2021-05-31 19:44:12 64
翻译 231. 2 的幂
问题描述笔记二进制表示中最低位:1. n & (n - 1)2. n & (-n)AC代码class Solution {public: bool isPowerOfTwo(int n) { return n>0 && ((n&(n-1)) == 0); }};
2021-05-31 19:36:05 54
转载 477. 汉明距离总和
问题描述AC代码class Solution {public: int totalHammingDistance(vector<int>& nums) { int ans = 0; int n = nums.size(); //逐位遍历 for(int i = 31; i >= 0; i--){ int cnt = 0; //数组每个元素最低位的统计1的个
2021-05-28 21:13:39 799
转载 461. 汉明距离
问题描述:笔记:1. 求距离 -> 相同位置值不同 ->异或(相同为 0, 不同为1)-> 统计1的个数2. s &= s - 1; //消除“最低位” 1x 1100 1101x-1 1011 1100& 1000 1100 ^ ^ 最低位1被消除AC代码(移位实现位计数)class Solution {public: int hammingDistance(int x, int y) {
2021-05-28 20:51:29 72
翻译 贪心
135. 分发糖果问题描述:老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?问题输入:示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2: 输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发
2021-05-22 15:36:54 77
翻译 1035. 不相交的线
问题描述:在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。问题输入:示例 1: 输入:nums1 = [1,4,2], nums2 = [1,2,4]输出
2021-05-22 15:07:43 99
翻译 810. 黑板异或游戏
问题描述:黑板上写着一个非负整数数组 nums[i] 。Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 (另外,如果只剩一个数字,按位异或运算得到它本身;如果无数字剩余,按位异或运算结果为 0。)换种说法就是,轮到某个玩家时,如果当前黑板上所有数字按位异或运算结果等于 0,这个玩家获胜。假设两个玩家每步都使用最优解,当且仅当 Alice 获胜时返回 true。问题输入示例:输入
2021-05-22 10:15:11 66
翻译 993. 二叉树的堂兄弟节点
问题描述在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。问题输入:示例 1:输入:root = [1,2,3,4], x = 4, y = 3输出:false示例 2:输入:root =
2021-05-21 14:29:12 128
翻译 1738. 找出第 K 大的异或坐标值
问题描述:给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出 matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。问题输入:示例 1:输入:matrix = [[5,2],[1,6]], k = 1
2021-05-21 14:22:30 95
翻译 692. 前K个高频单词
问题描述:给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。问题输入:示例 1:输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。 示例 2:输入: ["the"
2021-05-21 14:13:29 72
转载 1442. 形成两个异或相等数组的三元组数目
题目描述给你一个整数数组 arr 。现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。a 和 b 定义如下:a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]注意:^ 表示 按位异或 操作。请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。题目示例示例 1:输入:
2021-05-18 20:10:06 49
原创 13. 罗马数转整数
@toc问题描述:罗马数字包含以下七种字符: 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-05-15 15:24:00 77
翻译 算法很美C/C++ 第五章 字符串
文章目录1. 判定字符是否唯一2.字符串翻转3.变形词1. 判定字符是否唯一问题描述:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。样本数据:示例 1:输入: s = “leetcode”输出: false示例 2:输入: s = “abc”输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。AC代码:#include <iostream>using namespace std;int
2021-04-16 18:02:26 305
原创 蓝桥杯 日期excel 合集
文章目录第几天(2019)第几天(2019)题目描述2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第几天?注意:需要提交的是一个整数,不要填写任何多余内容。** 笔记**=DATE(year,month,day)=D2=DATEDIF(A1,A2,"y") //A1和A2的年份之差=D2=DATEDIF(A1,A2,"m") //月份之差=D2=DATEDIF(A1,A2,"d") //日期之差...
2021-04-10 13:34:30 303
原创 第十届 蓝桥杯C/C++ B组省赛(2019)
文章目录****试题A 组队********试题B 年号字串******AC代码**试题C 数列求和**AC代码**试题D 数的分解**AC代码******试题E 迷宫********试题F 特别数的和******AC代码******试题G 完全二叉树的权值********试题H 等差数列******AC代码******试题I 后缀表达式********试题J 灵能传输****试题A 组队解题思路每个位置尽可能选择分数高的,注意不要一个人选两次!试题B 年号字串AC代码BYQ#inclu
2021-04-09 20:58:35 110
转载 枚举题集合
*称硬币题目有12枚硬币。其中有11枚真币和1枚假币。假币和真 币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。输入第一行是测试数据组数。 每组数据有三行,每行表示一次称量的结果。银币标号为 A-L。每次称量的结果用三个以空格隔开的字符串表示: 天平左边放置的硬币 天平右边放置的硬币 平衡状态。其中平衡状态用up’’,down’’, 或 ``even’'表示, 分别为右 端高、右端低和平衡。天平左右的
2021-04-09 10:43:14 154
翻译 算法很美 笔记 2.递归与算法分析
最大公倍数样例输入:5 15样例输出:5样例输入:7 2样例输出:1AC#include <stdio.h>int gcd(int n, int m) { return m == 0 ? n : gcd(m, n % m);}int main() { int n, m; scanf("%d %d", &n, &m); printf("%d\n", gcd(n, m));}字符串反转输入abcd输出dcbaAC#inclu
2021-04-09 10:17:21 65
转载 第十一届蓝桥杯省赛 C/C++ 大学B组 (2020第一场)
试题 A: 跑步训练本题总分:5 分【问题描述】小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。【答案提交】这是一道结果填空题,你只需要算出结果后
2021-04-08 19:24:26 596
原创 字符串查找
题目判断字符串s1是否都s2里(乱序)输入abcahdbkic输出YesAC#include <iostream>#include <string>using namespace std;int fun(string s1, string s2) { char a; for (int i = 0 ; i < s1.size(); i++) { a = s1[i]; if (s2.find(a, 0) == -1) { //C++ 自带库函数,
2021-03-27 11:55:14 87
转载 单词分析
题目描述小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。输入描述输入一行包含一个单词,单词只由小写英文字母组成。对于所有的评测用例,输入的单词长度不超过 1000。输出描述输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如
2021-03-26 19:18:27 124
转载 解码
问题描述小明有一串很长的英文字母,可能包含大写和小写。在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、aa3a 等)。对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表达,小明不会将连续的超过 9 个相同的字符写成简写的形式。现在给出简写后的字符串,请帮助小明还原成原来的串。输入格式输入一行包含一个字
2021-03-26 17:01:32 131 1
原创 2020 大学B1
题目描述小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000 。如果小明跑步,每分钟损耗 600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0 ,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。题目分析注意先跑,后休息。可能存在体力不足以跑一分钟。注意同意分钟和秒的单位,输出秒。题目AC
2021-03-25 17:56:26 300
原创 递归-字符串反转
输入abcd输出dcbaAC#include <stdio.h>void Rever() { char s; scanf("%c", &s); //输入a,然后跳转递归,输入b if (s != '\n') { Rever(); printf("%c", s); } return;}int main() { Rever(); return 0;}
2021-03-25 16:39:23 124
翻译 递归形式插入排序 C语言
笔记对数组0~倒数第一个排序等价于:对数组的0~倒数第二个元素,这部分排序然后把是后一个元素插入到这个有序的部分中AC#include <stdio.h>#include <malloc.h>void InsertSort(int *&arr, int N) { if (N == 0) //跳出条件 return; InsertSort(arr, N - 1); //缩小问题规模 int x = arr[N]; //当前数组值 int inde
2021-03-25 16:25:55 504 2
转载 最大公倍数
样例输入:5 15样例输出:5样例输入:7 2样例输出:1AC#include <stdio.h>int gcd(int n, int m) { return m == 0 ? n : gcd(m, n % m);}int main() { int n, m; scanf("%d %d", &n, &m); printf("%d\n", gcd(n, m));}
2021-03-25 15:43:51 73
原创 算法提高 小写转换为大写
问题描述 输入一个小写字母,转换成大写字母。 输入格式 输入小写字母 输出格式 输出转换后的大写字母C-ACint main(){ char a, b; scanf("%c", &a); printf("%c", a-32);}笔记小写字母 + 32 = 大写字母...
2021-03-19 14:13:09 105
转载 两数之和
题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。实例输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。C-ACint* twoSum(int* nums, int numsSize, int
2021-03-19 13:57:09 55
转载 蓝桥杯——2019省赛A组第1题
1、题目描述小明对数位中含有2、0、1、9 的数字很感兴趣,在1 到40 中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574,平方和是14362。注意,平方和是指将每个数分别平方后求和。请问,在1 到2019 中,所有这样的数的平方和是多少?2、题解2658417853 3、注意数字范围极大,定义 long long int 型。(有的编译器不支持)4、AC代码#include <iostream>using namespace std;
2021-01-23 17:55:46 199 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人