2022-05-27:现在有N条鱼,每条鱼的体积为Ai,从左到右排列,数组arr给出。 每一轮,左边的大鱼一定会吃掉右边比自己小的第一条鱼, 并且每条鱼吃比自己小的鱼的事件是同时发生的。 返回多少轮之

本文主要是介绍2022-05-27:现在有N条鱼,每条鱼的体积为Ai,从左到右排列,数组arr给出。 每一轮,左边的大鱼一定会吃掉右边比自己小的第一条鱼, 并且每条鱼吃比自己小的鱼的事件是同时发生的。 返回多少轮之,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2022-05-27:现在有N条鱼,每条鱼的体积为Ai,从左到右排列,数组arr给出。
每一轮,左边的大鱼一定会吃掉右边比自己小的第一条鱼,
并且每条鱼吃比自己小的鱼的事件是同时发生的。
返回多少轮之后,鱼的数量会稳定。
注意:6 6 3 3。
第一轮过后 :
对于两个6来说,右边比自己小的第一条鱼都是第1个3,所以只有这个3被吃掉,
数组变成 : 6 6 3(第2个3),
第二轮过后 : 6 6。
返回2。
来自bilibili。

答案2022-05-27:

单调栈。

代码用rust编写。代码如下:

use rand::Rng;
fn main() {let len: i32 = 50;let value: i32 = 20;let test_time: i32 = 20000;println!("测试开始");for _i in 0..test_time {let n: i32 = rand::thread_rng().gen_range(0, len) + 1;let mut arr = random_array(n, value);let mut arr2 = arr.clone();let ans1 = min_turns1(&mut arr);let ans2 = min_turns2(&mut arr2);if ans1 != ans2 {println!("出错了!");print!("arr = {:?}", arr);println!("");println!("ans1 = {}", ans1);println!("ans2 = {}", ans2);break;}}println!("测试结束");
}fn min_turns1(arr: &mut Vec<i32>) -> i32 {let mut ans: i32 = 0;loop {let rest = eat_rest(arr);if arr.len() == rest.len() {break;}*arr = rest;ans += 1;}return ans;
}fn eat_rest(arr: &mut Vec<i32>) -> Vec<i32> {if arr.len() == 0 {return vec![0];}let n = arr.len() as i32;let mut delete: Vec<bool> = vec![];for _i in 0..n {delete.push(false);}let mut len = n;for i in 0..n {for j in i + 1..n {if arr[i as usize] > arr[j as usize] {if !delete[j as usize] {delete[j as usize] = true;len -= 1;}break;}}}let mut rest: Vec<i32> = vec![];for _i in 0..len {rest.push(0);}let mut j: i32 = 0;for i in 0..n {if !delete[i as usize] {rest[j as usize] = arr[i as usize];j += 1;}}return rest;
}fn min_turns2(arr: &mut Vec<i32>) -> i32 {let n = arr.len() as i32;let mut stack: Vec<Vec<i32>> = vec![];for i in 0..n {stack.push(vec![]);for _j in 0..2 {stack[i as usize].push(0);}}let mut stack_size: i32 = 0;let mut ans = 0;let mut i = n - 1;while i >= 0 {let mut cur_ans = 0;while stack_size > 0 && stack[(stack_size - 1) as usize][0] < arr[i as usize] {stack_size -= 1;cur_ans = get_max(cur_ans + 1, stack[stack_size as usize][1]);}stack[stack_size as usize][0] = arr[i as usize];stack[stack_size as usize][1] = cur_ans;stack_size += 1;ans = get_max(ans, cur_ans);i -= 1;}return ans;
}fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {if a > b {a} else {b}
}// 为了测试
fn random_array(n: i32, v: i32) -> Vec<i32> {let mut arr: Vec<i32> = vec![];for _i in 0..n {arr.push(rand::thread_rng().gen_range(0, v) - rand::thread_rng().gen_range(0, v));}return arr;
}

执行结果如下:

在这里插入图片描述


左神java代码

这篇关于2022-05-27:现在有N条鱼,每条鱼的体积为Ai,从左到右排列,数组arr给出。 每一轮,左边的大鱼一定会吃掉右边比自己小的第一条鱼, 并且每条鱼吃比自己小的鱼的事件是同时发生的。 返回多少轮之的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/356249

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new