Buttercola: Zenefits: Middle element
在一个整数数组中(无重复元素)找出一个元素,使得其大于所有他前面的数,并且小于所有他后面的数,返回其下标。例如[4,1,2,6,10,7]中,6满足条件,返回下标3。若有多个满足条件,返回一个即可。若无,返回-1
Solution:
Maintain two arrays, left[] and right[]. The left[i] stores the biggest element prior to i. The right[i] stores the minimum value after i.
Then for each element in array nums[i]. If it is greater than the biggest element left to i, and smaller than the smallest element after i. Then nums[i] must be the intermediate element.
Read full article from Buttercola: Zenefits: Middle element
在一个整数数组中(无重复元素)找出一个元素,使得其大于所有他前面的数,并且小于所有他后面的数,返回其下标。例如[4,1,2,6,10,7]中,6满足条件,返回下标3。若有多个满足条件,返回一个即可。若无,返回-1
Solution:
Maintain two arrays, left[] and right[]. The left[i] stores the biggest element prior to i. The right[i] stores the minimum value after i.
Then for each element in array nums[i]. If it is greater than the biggest element left to i, and smaller than the smallest element after i. Then nums[i] must be the intermediate element.
public int findMiddleElement(int[] nums) { if (nums == null || nums.length == 0) { return -1; } int len = nums.length; int[] left = new int[len]; int[] right = new int[len]; // Find the max element left to i left[0] = Integer.MIN_VALUE; int max = Integer.MIN_VALUE; for (int i = 1; i < len; i++) { if (nums[i - 1] > max) { max = nums[i - 1]; } left[i] = max; } // Find the min element after to i right[len - 1] = Integer.MAX_VALUE; int min = Integer.MAX_VALUE; for (int i = len - 2; i >= 0; i--) { if (nums[i + 1] < min) { min = nums[i + 1]; } right[i] = min; } // Iterate the nums and check if there is // an element which is greater than left[i] // less than right[i] for (int i = 0; i < len; i++) { if (nums[i] > left[i] && nums[i] < right[i]) { return i; } } return -1; }