一个整数的数组例如int a[]={3,5,6,7,9,11}
查询数组中有没有比它前面元素都大,比它后面的元素都小的数,没有打印-1,有显示其索引
3
写出实现代码!

解决方案 »

  1.   


    /**
     * 一个整数的数组例如int a[]={3,5,6,7,9,11}
     * 查询数组中有没有比它前面元素都大,比它后面的元素都小的数,没有打印-1,有显示其索引
     * 3
     * 写出实现代码!
     * @author Administrator
     *
     */
    public class GetNumber {
    private int[] data;
    public GetNumber()
    {
    data=new int[]{2,5,3,12,6,41,5,81,82,96};
    boolean f=false;
    int length=data.length-1;
    for(int i=1;i<data.length-1;i++)
    {
    int num = data[i];
    if(num >getMax(0,i-1) && num < getMin(i+1,length))
    {
    f=true;
    System.out.println(i);
    }

    }
    if(!f)
    {
    System.out.println(-1);
    }
    }
    /**
     * 查找指定区间的最大值
     * @param start
     * @param end
     * @return
     */
    public int getMax(int start,int end)
    {
    int max = data[start];
    for(int i=start;i<=end;i++)
    {
    if(data[i]>max)
    {
    max=data[i];
    }
    }
    return max;
    }
    /**
     * 查找指定区间的最小值
     * @param start
     * @param end
     * @return
     */
    public int getMin(int start,int end)
    {
    int min = data[start];
    for(int i=start;i<=end;i++)
    {
    if(data[i]<min)
    {
    min=data[i];
    }
    }
    return min;
    }
    public static void main(String[]args)
    {
    new GetNumber();
    }
    }
      

  2.   


    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;/**
     * @author monkey
     */public class Test { public static void main(String[] args) {
    Test test = new Test();
    int a[] = {25,5,234,67,89,250,660,890,900};
    List<Integer> result = test.reverse(a);
    for( Integer temp : result ) {
    System.out.println(temp.intValue());
    }
    } private List<Integer> reverse(int[] token) {

    int currentNumber = 0;
    List<Integer> list = new ArrayList<Integer>(); // 满足条件

    for( int i = 1; i < (token.length - 1); i++ ) {
    boolean isLarger = true;
    boolean isSmaller = true;
    currentNumber = token[i];
    for( int j = 0; j < i; j++ ) {
    if ( currentNumber < token[j] ) {
    isLarger = false;
    break;
    }
    }
    for( int j = i + 1; j < token.length; j++ ) {
    if ( currentNumber > token[j] ) {
    isSmaller = false;
    break;
    }
    }
    if( isLarger && isSmaller ) {
    list.add(i); // 添加该数的索引
    }
    }

    if( list.size() == 0 ) {
    list.add(-1); // 不存在
    } return list;
    }
    }
      

  3.   

    如果存在该数,则此数组相当于把一个有序数组循环移位了k次,所求即是移位之前的最后一个数
    可以用二分法查找,每次能扔掉一半,复杂度为log(n)
      

  4.   


    public class GetNumber {
    private int[] data; public GetNumber() {
    boolean f=false;
    data = new int[] { 2, 5, 3, 12, 6, 41, 40, 81, 82, 96 };
    for (int i = 1; i < data.length-1; i++) {
    if (data[i] > data[i - 1] && data[i] < data[i + 1]) {
    System.out.println(i - 1);
    f = true;
    }
    }
    if(!f){
    System.out.println(-1);
    }
              }
              public static void main(String[] args) {
    new GetNumber();
      }