《算法通关指南算法千题篇(5)--- 1.最长递增,2.交换瓶子,3.翻硬币》

《算法通关指南算法千题篇(5)--- 1.最长递增,2.交换瓶子,3.翻硬币》


🔥小龙报:个人主页

🎬作者简介:C++研发,嵌入式,机器人方向学习者

❄️个人专栏:《C语言》《算法》KelpBar海带Linux智慧屏项目

永远相信美好的事情即将发生

文章目录


前言

本系列为笔者的练习分享,题目难度适中适合刚入门(笔者也是刚入门)算法的同学学习,希望能和大家一起刷完一千道算法题见证算法编程和逻辑思维的进步
注:算法赛我们只讲解前三题涉及基础算法的后三题涉及高阶数据结构和算法我们以后在探究


一、最长递增

1.1题目:

题目链接:最长递增

1.2算法原理

这道题考点是模拟,我们通过遍历用一个变量len来记录合法区间的长度,当遍历的不合法的元素时利用一个变量ret来更新结果

注:此题最小合法区间长度为1,当我们每次找到一个合法区间,在寻找下一个区间应把len更新为1

1.3代码

c 复制代码
#include <iostream>
using namespace std;
const int N = 1e4 + 10;
int a[N],n;

int main()
{
	int n;
	cin >> n;

	for (int i = 1; i <= n; i++)
		cin >> a[i];
	
	int len = 0; 
	int ret = 0;
	for(int i = 1;i <= n;i++)
	{	
		if (a[i] > a[i - 1])
			len++;
		else
		{
			ret = max(ret, len);
			len = 1; //一个元素也是一个合法区间
		}
	}

	cout << ret << endl;
	return 0;
}

二、交换瓶子

2.1题目:

题目链接:交换瓶子

2.2算法原理

由于瓶子是有序的1~N,所以下标是1的位置就应该放1号瓶子,以此类推想到一种解法:遍历数组,当编号与放置位置不一致时,便将a[i]与a[a[i]]交换直至 a[i] == i

2.3代码

c 复制代码
#include <iostream>
using namespace std;
const int N = 1e4 + 10;
int a[N];


void Swap(int a[], int i, int j)
{
	int temp = a[i];
	a[i] = a[j];
	a[j] = temp;
}

int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];

	int ans = 0; //记录交换次数
	for (int i = 1; i <= n; i++)
	{
		while (a[i] != i)
		{
			ans++;
			Swap(a, i, a[i]);
		}
	}

	cout << ans << endl;
	return 0;
}

三、翻硬币

3.1题目:

题目链接:翻硬币

3.2算法原理

贪心策略: 从左到右遍历,遇到不同的位置就翻转当前和下一个硬币。

正确性证明: 每个位置只能被前面的操作影响一次,必须立即修正差异,无法回溯。

3.3代码

c 复制代码
#include <iostream>
using namespace std;

int main()
{
	string a, b;
	cin >> a >> b;

	int ans = 0;
	for (int i = 0; i < a.size(); i++)
	{
		if (a[i] != b[i])
		{
			a[i + 1] = a[i + 1] == 'o' ? '*' : 'o';
			ans++;
		}
	}

	cout << ans << endl;
	return 0;
}

总结 --- 每日励志

相关推荐
灰子学技术1 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
那个村的李富贵2 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰2 小时前
[python]-AI大模型
开发语言·人工智能·python
power 雀儿2 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码2 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚2 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
熬夜有啥好2 小时前
数据结构——哈希表
数据结构·散列表
你这个代码我看不懂2 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1362 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐2 小时前
最大堆和最小堆 实现思路
java·开发语言·算法