package com.interview.books.svinterview; import java.util.ArrayList; import java.util.List; /** * Created_By: stefanie * Date: 14-12-8 * Time: 下午2:58 */ public class SV12_SpecialNumber { public List<Integer> find(int[] array) { // List<Integer> P = new ArrayList<>(); // if(P == null || array.length == 0) return P; // // int[] maxLeft = new int[array.length]; // maxLeft[0] = array[0]; // for(int i = 1; i < array.length; i++){ // maxLeft[i] = Math.max(maxLeft[i - 1], array[i]); // } // // int min = Integer.MAX_VALUE; // for(int i = array.length - 1; i >= 0; i--){ // if(array[i] <= min){ // min = array[i]; // if(maxLeft[i] == array[i]) P.add(i); // } // } // return P; List<Integer> result = new ArrayList(); if(array == null || array.length == 0) return result; int[] min = new int[array.length]; int[] max = new int[array.length]; int maxNumberOffset = 0; for(int i = 1; i < array.length; i ++) { if(array[i] >= array[maxNumberOffset]) { maxNumberOffset = i; max[i] = i; } else { max[i] = maxNumberOffset; } } int minNumberOffset = array.length - 1; for(int i = array.length - 2; i >= 0; i --) { if(array[i] <= array[minNumberOffset]) { minNumberOffset = i; min[i] = i; } else { min[i] = minNumberOffset; } } for(int i = 0; i < array.length; i ++) if(min[i] == i && max[i] == i) result.add(i); return result; } public static void main(String[] args){ SV12_SpecialNumber finder = new SV12_SpecialNumber(); int[] arrays = new int[]{1,0,1,0,1,2,3}; for(Integer index : finder.find(arrays)) System.out.println(index); } }