classMyCalendarTwo{public:
map<int,int> calendar;MyCalendarTwo(){}boolbook(int start,int end){
calendar[start]++;
calendar[end]--;int count =0;for(auto& c : calendar){
count += c.second;if(count >2){
calendar[start]--;
calendar[end]++;returnfalse;}}returntrue;}};/**
* Your MyCalendarTwo object will be instantiated and called as such:
* MyCalendarTwo* obj = new MyCalendarTwo();
* bool param_1 = obj->book(start,end);
*/
81. 搜索旋转排序数组 II
首刷自解
classSolution{public:boolsearch(vector<int>& nums,int target){int left =0;while(nums[left]== nums.back()){
left++;// 如果都是同一个值,那么会扫描到尾部if(left == nums.size())return nums.back()== target;}// 求最小值int l = left, r = nums.size()-1;while(l < r){int m =(l + r)>>1;if(nums[m]<= nums.back()) r = m;else l = m +1;}if(target == nums.back())returntrue;if(target > nums.back()){
r--;
l = left;}else{
r = nums.size()-1;}while(l < r){int m =(l + r)>>1;if(nums[m]>= target) r = m;else l = m +1;}return nums[l]== target;}};
162. 寻找峰值
首刷自解
classSolution{public:intfindPeakElement(vector<int>& nums){if(nums.size()==1)return0;int l =1, r = nums.size()-2;if(nums[l -1]> nums[l])return l -1;if(nums[r +1]> nums[r])return r +1;int ans;while(l <= r){int m =(l + r)>>1;if(nums[m]> nums[m -1]&& nums[m]> nums[m +1])return m;if(nums[m]< nums[m +1]) l = m +1;else r = m;}return l;}};