题目:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:
因为这个数组整体来说是有序的,只不过是分为前半段和后半段.
对于这种整体为有序的数组可以采用二分查找法进行实现.
第一种情况:(3,4,5,1,2)
这种情况下array[mid]>array[right],left=mid+1
因为这种情况mid一定不是最大的可以排除mid,所以left=mid+1.
第二种情况:(8,6,7)
array[mid]<array[right],right=mid
这种情况mid可能就是最小值,所以right=mid.
第三种情况:(1,0,1,1,1)和(1,1,1,0,1)
array[mid]=array[right]
这种情况下最小值可能在右侧也可能在左侧.
所以right=right-1,依次进行查询.
代码:
public class TwoStackToQuene {
Stack<Integer> stackOne = new Stack<Integer>();
Stack<Integer> stackTwo = new Stack<Integer>();
public void push(int node) {
stackOne.push(node);
}
public int pop() {
if (stackTwo.isEmpty()) {
while (!stackOne.isEmpty()) {
int node = stackOne.pop();
stackTwo.push(node);
}
}
return stackTwo.pop();
}
}
网友评论