《算法通关指南算法千题篇(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 分钟前
JavaEE:多线程初阶(一)
java·开发语言·jvm
C_心欲无痕4 分钟前
ts - 模板字面量类型与 `keyof` 的魔法组合:`keyof T & `on${string}`使用
linux·运维·开发语言·前端·ubuntu·typescript
云里雾里!6 分钟前
LeetCode 744. 寻找比目标字母大的最小字母 | 从低效到最优的二分解法优化
算法·leetcode
fy zs7 分钟前
网络编程套接字
linux·服务器·网络·c++
yuanmenghao7 分钟前
CAN系列 — (8) 为什么 Radar Object List 不适合“直接走 CAN 信号”
网络·数据结构·单片机·嵌入式硬件·自动驾驶·信息与通信
最贪吃的虎7 分钟前
Redis其实并不是线程安全的
java·开发语言·数据库·redis·后端·缓存·lua
fpcc8 分钟前
模板编程—模板和元编程中的错误输出
c++·模板编程
乾元10 分钟前
无线定位与链路质量预测——从“知道你在哪”,到“提前知道你会不会掉线”的网络服务化实践
运维·开发语言·人工智能·网络协议·重构·信息与通信
xie_pin_an10 分钟前
C++ 类和对象全解析:从基础语法到高级特性
java·jvm·c++
AC赳赳老秦10 分钟前
Unity游戏开发实战指南:核心逻辑与场景构建详解
开发语言·spring boot·爬虫·搜索引擎·全文检索·lucene·deepseek