首页 > 试题广场 >

打印极值点下标

[编程题]打印极值点下标
  • 热度指数:18429 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称该整数为一个极值点,极值点的下标就是i。

输入描述:
每个案例第一行为此数组元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔


输出描述:
每个案例输出为n个数字(其中n为该案例中极值点的个数):每个数字对应相应数组的相应极值点下标值,下标值之间用空格分隔。
示例1

输入

10
10 12 12 11 11 12 23 24 12 12
15
12 12 122 112 222 211 222 221 76 36 31 234 256 76 76 
15
12 14 122 112 222 222 222 221 76 36 31 234 256 76 73

输出

0 7
2 3 4 5 6 10 12
0 2 3 10 12 14
Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            int[] a = new int[n];
            for (int i = 0; i <n ; i++) a[i]= scanner.nextInt();
            System.out.print(0+" ");
            for (int i = 1; i < n-1; i++)
                if ((a[i]<a[i-1]&&a[i]<a[i+1])||(a[i]>a[i-1]&&a[i]>a[i+1]))
                    System.out.print(i+" ");
            System.out.println(n-1);
        }
    }
}


发表于 2020-03-18 19:26:03 回复(0)
import java.util.Scanner;


public class Main
{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        int arr[]=new int[N];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=sc.nextInt();
        }
        for (int i = 0; i < arr.length; i++) {
            if (i==0&&arr[i]!=arr[i+1]) {
                System.out.print(i+" ");
            }
            if (i!=0&&i!=arr.length-1&&arr[i]>arr[i+1]&&arr[i]>arr[i-1]) {
                System.out.print(i+" ");
            }
            if (i!=0&&i!=arr.length-1&&arr[i]<arr[i+1]&&arr[i]<arr[i-1]) {
                System.out.print(i+" ");
            }
            if (i==arr.length-1&&arr[i]!=arr[i-1]) {
                System.out.print(i+" ");
            }
        }
    }
}

发表于 2019-11-05 09:19:23 回复(0)
这题没什么难度,练习了下用java8的lambda表达式输出结果,代码很简洁~

import java.util.*;
import java.util.stream.Collectors;
public class Main {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int k = reader.nextInt();
        int[] A = new int[k];
        for (int i = 0; i < k; ++i) {
            A[i] = reader.nextInt();
        }
        ArrayList<Integer> index = new ArrayList<>();
        for (int i = 1; i < A.length-1; ++i) {
            if (A[i] > A[i-1] && A[i] > A[i+1]) {
                index.add(i);
            } else if (A[i] < A[i-1] && A[i] < A[i+1]) {
                index.add(i);
            }
        }
        if (A[0] != A[1]) {
            index.add(0);
        }
        if (A[A.length-1] != A[A.length-2]) {
            index.add(A.length-1);
        }
        
        Collections.sort(index);
        System.out.println(
                index.stream()
                .map((x) -> String.valueOf(x))
                .collect(Collectors.joining(" "))
        );
    }
}

发表于 2018-05-30 15:19:47 回复(0)