加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

检测本地最小值和最大值,java

发布时间:2020-12-15 08:36:02 所属栏目:Java 来源:网络整理
导读:给定是任何整数序列,如23 7 13 4 8 6.我想用以下规则检测局部最小值和最大值: 当以下数字更大时,序列中的第一个数字是局部最小值 当前一个数字更大时,序列中的最后一个数字是局部最小值 当序列中的数字小于前一个和后一个数字时,它是一个局部最小值 我可以
给定是任何整数序列,如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);
    }

谢谢你的帮助!

解决方法

你有什么看起来像一个良好的开端.

但是,仅查看元组是不够的,因为您必须查看三个数字才能检测到局部最小值 – 因此您必须扩展算法.

要了解如何执行此操作,请尝试在纸上编写一个简单的示例.你会如何手动找到当地的最小值?你能在程序中做类似的事情吗?

随意发布您的程序的更新版本(通过编辑问题,将新代码添加到底部),如果您仍然卡住,我们可以提供帮助.

回答你的编辑:

What would happen then? Set the vars
to 0 and start with the next number 4?
Or store 7 in left,13 in the middle
to have 4 as current?

你不能只把一切都设置为0;你仍然需要你的三元组的最后两个数字来开始下一个三元组,因为你的三元组表现就像一个窗口滑过数字列表(这通常被称为“滑动窗口”技术,因为许多算法使用它).

您可以手动将数字复制到新变量中.

为了更加优雅,您可以在单独的“Triplet”类中实现它.要考虑的想法:该类可以检查最小值,并允许您添加新号码,自动“推出”最旧的号码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读