美文网首页
旋转数组最小的数字

旋转数组最小的数字

作者: Hammy | 来源:发表于2018-03-08 09:49 被阅读0次

    题目:
    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{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();
        }
    }
    

    相关文章

      网友评论

          本文标题:旋转数组最小的数字

          本文链接:https://www.haomeiwen.com/subject/cymefftx.html