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; };