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

相关文章

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

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/