给定任何整数序列,例如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
那么会发生什么呢?将变量设置为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);
}
感谢您的帮助!