1.数组中数值和下标相等的元素
假设一个单调递增数组里的每个元素都是整数并且是唯一的。请找出数组中任意一个数值等于其下标的元素。
思路:利用二分查找。假设找到的数字的值大于他的下标,由于数组中数字唯一且单调递增,因此这个数字右面的数字都应该大于各自对应的下标,答案在左面。同理,加入找到数字的值小于它的下标,那么这个数字左边的数字都应该小于各自对应的下标,答案在右面。

int GetNumbersSameAsIndex(const int* numbers,int length)
{
    if(numbers==nullptr||length<=0)
    {
        return -1;
    }
    int left=0;
    int right=length-1;
    while(left<=right)
    {
        int middle=left+((right-left)>>1);
        if(number[middle]==middle)
        {
            return middle;
        }
        if(numbers[middle]>middle)
        {
            right=middle-1;//在左面
        }
        else
        {
            left=middle+1;//在右面
        }
    }
    return -1;
}

2.用两个堆栈实现队列

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        int number;
        if(stack2.empty())
        {
            while(!stack1.empty())
            {
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        number=stack2.top();
        stack2.pop();
        return number;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};