《算法通关指南算法千题篇(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;
}

总结 --- 每日励志

相关推荐
yy_xzz8 小时前
Debian 系统中 Qt Creator 用 sudo 启动后权限问题
c++·qt
国服第二切图仔8 小时前
Rust入门开发之Rust 集合:灵活的数据容器
开发语言·后端·rust
今日说"法"8 小时前
Rust 线程安全性的基石:Send 与 Sync 特性解析
开发语言·后端·rust
报错小能手8 小时前
C++笔记(面向对象)定义虚函数规则 运行时多态原理
开发语言·c++·笔记
Cx330❀8 小时前
《C++ 多态》三大面向对象编程——多态:虚函数机制、重写规范与现代C++多态控制全概要
开发语言·数据结构·c++·算法·面试
_dindong9 小时前
【递归、回溯、搜索】专题六:记忆化搜索
数据结构·c++·笔记·学习·算法·深度优先·哈希算法
seabirdssss9 小时前
JDK 11 环境正确,端口未被占用,但是运行 Tomcat 11 仍然闪退
java·开发语言·tomcat
努力学算法的蒟蒻9 小时前
day03(11.1)——leetcode面试经典150
java·算法·leetcode
yugi9878389 小时前
C语言多进程创建和回收
linux·c语言·算法