考研机试 54.打印极值点下标

 

时间:2021/03/08

 

一.题目描述

在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。

输入描述

第一行是此数组的元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔。

输出描述

每个案例输出为n行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。

题目链接

https://www.nowcoder.com/practice/7fd72f8ac7964ba3b8baa8735246e1f1?tpId=40&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

 

二.算法

题解

使用int数组存储读取的数据。然后通过与相邻数据进行比较来判断是否为极值。这里要注意第一个和最后一个数据的判断,因为它们只有一个相邻数据,所以当它们与那个数字不相等时就是极值。

代码

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        
        Scanner in = new Scanner(System.in);
        
        while(in.hasNext()){
            
            //读取输入
            int n = in.nextInt();
            int[] num = new int[n];
            for(int i = 0; i < n; i++){
                num[i] = in.nextInt();
            }
            
            //求极值点并打印
            if(num[0] != num[1]){
                System.out.print(0 + " ");
            }
            for(int i = 1; i < n - 1; i++){
                if(num[i] > num[i - 1] && num[i] > num[i + 1]){
                    System.out.print(i + " ");
                }else if(num[i] < num[i - 1] && num[i] < num[i + 1]){
                    System.out.print(i + " ");
                }
            }
            if(num[n - 2] != num[n - 1]){
                System.out.print(n - 1);
            }
            System.out.println();
        }
    }
}

 

上一篇:如何将机器码转换为汇编代码


下一篇:54、STP综合实验