
目录
2. 外观数列 🌟🌟
3. 最优路线 🌟🌟🌟
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
示例 1:
输入: nums = [1,2,3,1], k = 3 输出: true
示例 2:
输入: nums = [1,0,1,1], k = 1 输出: true
示例 3:
输入: nums = [1,2,3,1,2,3], k = 2 输出: false
出处:
https://edu.csdn.net/practice/26046521
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
bool containsNearbyDuplicate(vector<int> &nums, int k)
{
int n = nums.size(), idx = 0;
unordered_map<int, int> nmap;
for (int i = 0; i < n; ++i)
{
auto iter = nmap.find(nums[i]);
if (iter != nmap.end())
{
if (i - iter->second <= k)
return true;
else
iter->second = i;
}
else
nmap[nums[i]] = i;
}
return false;
}
};
int main()
{
Solution s;
vector<int> nums = {1,2,3,1};
cout << (s.containsNearbyDuplicate(nums, 3) ? "true" : "false") << endl;
nums = {1,0,1,1};
cout << (s.containsNearbyDuplicate(nums, 1) ? "true" : "false") << endl;
nums = {1,2,3,1,2,3};
cout << (s.containsNearbyDuplicate(nums, 2) ? "true" : "false") << endl;
return 0;
}
输出:
true
true
false
给定一个正整数 n ,输出外观数列的第 n 项。
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
你可以将其视作是由递归公式定义的数字字符串序列:
countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:
1. 1 2. 11 3. 21 4. 1211 5. 111221 第一项是数字 1 描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 "11" 描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 "21" 描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 "1211" 描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"
要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
例如,数字字符串 "3322251" 的描述如下图:

示例 1:
输入:n = 1 输出:"1" 解释:这是一个基本样例。
示例 2:
输入:n = 4 输出:"1211" 解释: countAndSay(1) = "1" countAndSay(2) = 读 "1" = 一 个 1 = "11" countAndSay(3) = 读 "11" = 二 个 1 = "21" countAndSay(4) = 读 "21" = 一 个 2 + 一 个 1 = "12" + "11" = "1211"
提示:
1 <= n <= 30以下程序实现了这一功能,请你填补空白处内容:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void parse(char *input, char *output)
{
char *p = input;
char *q = output;
while (*p != '\0')
{
int count = 1;
while (p[0] == p[1])
{
count++;
p++;
}
int n = 0;
while (count > 0)
{
n += count % 10;
count /= 10;
}
____________________;
*q++ = p[0];
p++;
}
*q = '\0';
}
static char *countAndSay(int n)
{
if (n < 1)
{
return NULL;
}
char *result;
char *prev = malloc(10000);
char *next = malloc(10000);
strcpy(prev, "1");
if (n == 1)
{
return prev;
}
int i;
for (i = 2; i <= n; i++)
{
if (i & 0x1)
{
parse(next, prev);
result = prev;
}
else
{
parse(prev, next);
result = next;
}
}
return result;
}
int main(int argc, char **argv)
{
if (argc != 2)
{
fprintf(stderr, "Usage: ./test n\n");
exit(-1);
}
printf("%s\n", countAndSay(atoi(argv[1])));
return 0;
}
```
出处:
https://edu.csdn.net/practice/26046522
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void parse(char *input, char *output)
{
char *p = input;
char *q = output;
while (*p != '\0')
{
int count = 1;
while (p[0] == p[1])
{
count++;
p++;
}
int n = 0;
while (count > 0)
{
n += count % 10;
count /= 10;
}
while (n > 0)
{
*q++ = (n % 10) + '0';
n /= 10;
}
*q++ = p[0];
p++;
}
*q = '\0';
}
static char *countAndSay(int n)
{
if (n < 1)
{
return NULL;
}
char *result;
char *prev = (char*)malloc(10000);
char *next = (char*)malloc(10000);
strcpy(prev, "1");
if (n == 1)
{
return prev;
}
int i;
for (i = 2; i <= n; i++)
{
if (i & 0x1)
{
parse(next, prev);
result = prev;
}
else
{
parse(prev, next);
result = next;
}
}
return result;
}
int main()
{
printf("%s\n", countAndSay(1));
printf("%s\n", countAndSay(4));
return 0;
}
输出:
1
1211
题目描述
探险队要穿越泥潭,必须选择可踩踏的落脚点。可是泥潭面积很大,落脚点又实在少得可怜,一不小心就会深陷泥潭而无法脱身。侦查员费尽周折才从老乡手里弄到了一份地图,图中标出了落脚点的位置,而且令人震惊的是:泥潭只有一条穿越路线,且对于 n×m 的地图,路线长度为 n+m-1!请编程为探险队找出穿越路线。
输入描述
两个整数 n 和 m,表示泥潭的长和宽。下面 n 行 m 列表示地形(0 表示泥潭,1 表示落脚点)
输出描述
用坐标表示穿越路线,坐标之间用 > 分隔
样例输入
6 9
1 1 1 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0
0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 1
样例输出
(1,1)>(1,2)>(1,3)>(2,3)>(2,4)>(2,5)>(3,5)>(4,5)>(4,6)>(5,6)>(5,7)>(5,8)>(5,9)>(6,9)
出处:
https://edu.csdn.net/practice/26046523
代码:
#include <stdio.h>
#include <string.h>
const int N = 101;
int map[N][N];
int n, m;
struct point
{
int l, r;
} node[N];
int ans;
void DFS(int x, int y)
{
if (x == n && y == m)
{
for (int i = 1; i < ans; i++)
printf("(%d,%d)>", node[i].l, node[i].r);
printf("(%d,%d)\n", x, y);
}
else
{
if (map[x][y] == 1 && x <= n && y <= m)
{
node[ans].l = x;
node[ans].r = y;
ans++;
DFS(x + 1, y);
DFS(x, y + 1);
}
}
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
ans = 1;
memset(map, 0, sizeof(map));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &map[i][j]);
DFS(1, 1);
}
return 0;
}
输出:
6 9 ↙
1 1 1 0 0 0 0 0 0↙
0 0 1 1 1 0 0 0 0↙
0 0 0 0 1 0 0 0 0↙
0 0 0 0 1 1 0 0 0↙
0 0 0 0 0 1 1 1 1↙
0 0 0 0 0 0 0 0 1↙
(1,1)>(1,2)>(1,3)>(2,3)>(2,4)>(2,5)>(3,5)>(4,5)>(4,6)>(5,6)>(5,7)>(5,8)>(5,9)>(6,9)
^Z↙ (输入Ctrl+Z,回车退出)
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
题目描述小张买了 n 件白色的衣服,他觉得所有衣服都是一种颜色太单调,希望对这些衣服进行染色,每次染色时,他会将某种颜色的所有衣服寄去染色厂,第 i 件衣服的邮费为 ai 元,染色厂会按照小张的要求将其中一部分衣服染成同一种任意的颜色,之后将衣服寄给小张,请问小张要将 n 件衣服染成不同颜色的最小代价是多少?输入描述第一行为一个整数 n ,表示衣服的数量。第二行包括 n 个整数a1,a2...an 表示第 i 件衣服的邮费为 ai 元。(1≤n≤10^5,1≤ai≤10^9 )输出描述输出一个整数表示小张所要花费的最小代价。输入输出样例输入551321输出25 思考🤔:题意:意思是
注意事项:本题为"线性dp—最长上升子序列的长度"的扩展题,所以dp思路这里就不再赘述。题目:比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等。这些子序列中和最大为18,为子序列(1,3,5,9)的和。你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100,1,2,3)的最大上升子序列和为100,而最长上升子序列为(1,2,3)。输入格式输入的第一行是序列的长度N。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。输出格式输出一个整数,表示最大上升子序列和。数据
目录类01背包问题,选or不选变种走方格类01背包问题,选or不选不同的子序列_牛客题霸_牛客网问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数状态: 子状态:由S的前1,2,...,m个字符组成的子串与T的前1,2,...,n个字符相同的个数 F(i,j):S[1:i]中的子串与T[1:j]相同的个数状态递推: 在F(i,j)处需要考虑S[i]=T[j]和S[i]!=T[j]两种情况 当S[i]=T[j]
专栏: 蓝桥杯——每日四道编程题(两道真题+两道模拟)“蓝桥杯就要开始了,这些题刷到就是赚到”₍ᐢ..ᐢ₎♡另一个专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)专题前瞻:复习并查集、Tire字符串、双指针、二分目录第一道真题(日志统计)输出描述输入输出样例第二道真题(合根植物)输出描述输入输出样例第三道模拟题(acwing):Trie字符串统计第四道真题(扫地机器人)题目描述第一道真题(日志统计) 输出描述按从小到大的顺序输出热帖 id。每个 id 一行。输入输出样例输入:71020101010101019110031003输出;13运行限制最大运行时间:1s最大运行内存:256M双
专栏:蓝桥杯——每日四道填空题(两道真题+两道模拟题)&离蓝桥杯已经不到一个月时间了,赶快刷起来吧,填空题一定别丢分!!୧꒰•̀ᴗ•́꒱୨另一个专栏是:蓝桥杯——编程题刷题营(每日四题,两道模拟,两道真题)目录第一道真题(2016年省赛):寒假作业 |答案:64第二道真题(2019年省赛):质数 |答案:17569第三道模拟题(2022年第二次模拟赛): 拆分质数个数|答案:33第四道模拟题():答案:10第一道真题(2016年省赛):寒假作业 |答案:64题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。现在小学的数学题目也不是那么好玩的。看看这个寒假作业:
🌕写在前面Hello🤗大家好啊,我是kikokingzz,名字太长不好记,大家可以叫我kiko哦~从今天开始,我将正式开启一个新的打卡专题——《C语言百炼成神计划》,没错!百炼成神,目的是通过百天刷题计划,通过题目和知识点串联的方式,完成C语言的复习和巩固;后期还会配有专门的笔记总结和文档教程哦!想要搞定,搞透C语言的同学🎉🎉欢迎持续关注🎉🎉🍊博客主页:kikoking的江湖背景🍊🌟🌟往期必看🌟🌟🔥【C语言百炼成神】第一日·操作符🔥🔥【C语言百炼成神】第二日·操作符🔥🔥【C语言百炼成神】第三日·操作符🔥ps:文章若有任何疑问欢迎光速评论私信我!!有时kiko可能会打错,脑子瓦特了😵💫目录🌕写
和鲸社区算是国内比较不错的机器学习算力平台,可以通过每日登录积累成长值,每月还会给鲸币奖励,有一段时间每天都会登登陆一次,但是有时候还是会忘记。最近根据腾讯云Serverless部署云函数实现自动登录,解放双手。首先每次登陆后将进行微信推送,我采用的是pushplus平台,获取token即可。微信推送#从pushplus平台获取tokentoken='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'defsendToWechat(title,content):url='http://www.pushplus.plus/send'headers={'Content-Type
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。题目:Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0,p1,…,pn-1},用这列数构造Huffman树的过程如下: 1.找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删
基础概念:前中后序遍历1/\23/\\456层次遍历顺序:[123456]前序遍历顺序:[124536]中序遍历顺序:[425136]后序遍历顺序:[452631]层次遍历使用BFS实现,利用的就是BFS一层一层遍历的特性;而前序、中序、后序遍历利用了DFS实现。前序、中序、后序遍只是在对节点访问的顺序有一点不同,其它都相同。①前序voiddfs(TreeNoderoot){visit(root);dfs(root.left);dfs(root.right);}②中序voiddfs(TreeNoderoot){dfs(root.left);visit(root);dfs(root.right)