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

总结 --- 每日励志

相关推荐
爱吃rabbit的mq1 天前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
精彩极了吧1 天前
C语言基本语法-自定义类型:结构体&联合体&枚举
c语言·开发语言·枚举·结构体·内存对齐·位段·联合
(❁´◡`❁)Jimmy(❁´◡`❁)1 天前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi1 天前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
南极星10051 天前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言
baidu_247438611 天前
Android ViewModel定时任务
android·开发语言·javascript
CSDN_RTKLIB1 天前
【四个场景测试】源文件编码UTF-8 BOM
c++
Dev7z1 天前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
不能隔夜的咖喱1 天前
牛客网刷题(2)
java·开发语言·算法
VT.馒头1 天前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript