检测本地最小值和最大值,java
给定是任何整数序列,如23 7 13 4 8 6.我想用以下规则检测局部最小值和最大值:
>当以下数字更大时,序列中的第一个数字是局部最小值 我可以使用方法hasNextInt和getNextInt. 目前我在考虑算法.但我不确定我是否理解逻辑.首先,我构建一个元组并比较它的数字.例如.我比较23和7. 7是当地最小值.那我该怎么办?建立一个三联?但是那个数字有三倍,23 7 13或13 4 8?我不确定. 有任何想法吗? 更新: 假设我们将左邻居和数字存储在三个数字的中间: left middle current 0 0 23 23 0 7 23 7 13 <- you have a triple,compare => minimum 7 那会发生什么?将vars设置为0并从下一个数字4开始?或者在左边存储7,在中间存储13以使当前有4个? 更新(此代码似乎有效): int left = 0; int center = 0; while(hasNextInt()){ int current = getNextInt(); if((left != 0) && (center != 0)){ if(current > center && center < left){ System.out.println("Min: "+center); left = center; center = current; }else{ left = center; center = current; } }else if((left != 0) && (center == 0)){ if(left < current){ System.out.println("Min: "+left); center = current; }else{ center = current; } }else if((left == 0) && (center == 0)){ left = current; } } if(left > center){ System.out.println("Min: "+center); } 谢谢你的帮助! 解决方法
你有什么看起来像一个良好的开端.
但是,仅查看元组是不够的,因为您必须查看三个数字才能检测到局部最小值 – 因此您必须扩展算法. 要了解如何执行此操作,请尝试在纸上编写一个简单的示例.你会如何手动找到当地的最小值?你能在程序中做类似的事情吗? 随意发布您的程序的更新版本(通过编辑问题,将新代码添加到底部),如果您仍然卡住,我们可以提供帮助. 回答你的编辑:
你不能只把一切都设置为0;你仍然需要你的三元组的最后两个数字来开始下一个三元组,因为你的三元组表现就像一个窗口滑过数字列表(这通常被称为“滑动窗口”技术,因为许多算法使用它). 您可以手动将数字复制到新变量中. 为了更加优雅,您可以在单独的“Triplet”类中实现它.要考虑的想法:该类可以检查最小值,并允许您添加新号码,自动“推出”最旧的号码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |