LeetCode
来源:互联网 发布:vga矩阵切换器24进 编辑:程序博客网 时间:2024/06/17 21:09
33. Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
在一个旋转过的数组中(数字不重复)查找一个数。
就,分情况讨论。主要是脑子得清醒,不然很容易晕orz。时间复杂度O(logn)
class Solution {public: int search(vector<int>& nums, int target) { if (nums.empty()) return -1; int le = 0, ri = nums.size() - 1; while (le < ri) { int mid = (le + ri) >> 1; if (nums[mid] == target) return mid; else if (nums[le] <= nums[mid]) { if (target >= nums[le] && target < nums[mid]) ri = mid - 1; else le = mid + 1; } else { if (target > nums[mid] && target <= nums[ri]) le = mid + 1; else ri = mid - 1; } } return nums[le] == target ? le : -1; }};
81. Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
在一个旋转过的数组中(数字有重复)查找一个数。
嗯,整体思路不变,只要要去除重复的数。时间复杂度O(n)感觉最坏情况下确实有这么多。。。
class Solution {public: bool search(vector<int>& nums, int target) { if (nums.empty()) return false; int le = 0, ri = nums.size() - 1; while (le < ri) { while (le < ri && nums[le] == nums[le+1]) le++; while (le < ri && nums[ri] == nums[ri-1]) ri--; if (le >= ri) break; int mid = (le + ri) >> 1; if (nums[mid] == target) return true; if (nums[le] <= nums[mid]) { if (target >= nums[le] && target < nums[mid]) ri = mid - 1; else le = mid + 1; } else { if (target > nums[mid] && target <= nums[ri]) le = mid + 1; else ri = mid - 1; } } return nums[le] == target ? true : false; }};
153. Find Minimum in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
在一个旋转过的数组中寻找最小值。时间复杂度O(logn)
class Solution {public: int findMin(vector<int>& nums) { if (nums.empty()) return -1; int mmin = nums[0]; int le = 0, ri = nums.size() - 1; while (le < ri) { int mid = (le + ri) >> 1; if (nums[ri] >= nums[mid]) ri = mid; else if (nums[le] <= nums[mid]) le = mid + 1; } return nums[le]; }};
154. Find Minimum in Rotated Sorted Array II
Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
The array may contain duplicates.
在一个旋转过的数组中找到最小值(数组有重复值)。时间复杂度O(n)
class Solution {public: int findMin(vector<int>& nums) { if (nums.empty()) return -1; int le = 0, ri = nums.size() - 1; while (le < ri) { while (le < ri && nums[le] == nums[le+1]) le++; while (le < ri && nums[ri] == nums[ri-1]) ri--; if (le >= ri) break; int mid = (le + ri) >> 1; if (nums[mid] <= nums[ri]) ri = mid; else if (nums[mid] >= nums[le]) le = mid + 1; } return nums[le]; }};
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- HDU 4427 Math Magic(DP)
- POI实现json字符串解析后导出到excel
- python可变参数之*args和*kwargs学习回顾
- 人见人爱A^B
- 项目中与php后台交接接口 javabean与请求返回的数据类型不匹配导致的出错
- LeetCode
- PHP获取 ,根目录,当前文件路径,上层目录路径 ,文件名,扩展名
- Linux 缺少库,查找库的安装包的方法
- 前端的BFC、IFC、GFC和FFC
- 政史特长生友谊赛Round3题解
- NodeJS常用命令
- TCP协议详解
- 超过一半的数字--一个数组中有一个数字的次数超过了数组的一半,求出这个字符。
- GIT在实际项目中的应用