diff --git a/solution/0000-0099/0033.Search in Rotated Sorted Array/README.md b/solution/0000-0099/0033.Search in Rotated Sorted Array/README.md index bbc59c10bb224..7fb8da565a762 100644 --- a/solution/0000-0099/0033.Search in Rotated Sorted Array/README.md +++ b/solution/0000-0099/0033.Search in Rotated Sorted Array/README.md @@ -48,6 +48,46 @@ ``` +### **C++** + + + +```cpp +class Solution { +public: + int search(vector& nums, int target) { + if(nums.size() < 1) { + return -1; + } + if(nums.size() == 1) { + return nums[0] == target ? 0 : -1; + } + int n = nums.size(); + int l = 0, r = n - 1; + while(l <= r) { + int mid = (l + r) / 2; + if(nums[mid] == target) { + return mid; + } + if(nums[l] <= nums[mid]) { + if(nums[l] <= target && target < nums[mid]) { + r = mid - 1; + }else { + l = mid + 1; + } + }else { + if(nums[mid] < target && target <= nums[r]) { + l = mid + 1; + }else { + r = mid - 1; + } + } + } + return -1; + } +}; +``` + ### **...** ``` diff --git a/solution/0000-0099/0033.Search in Rotated Sorted Array/README_EN.md b/solution/0000-0099/0033.Search in Rotated Sorted Array/README_EN.md index 5769ad8add2c1..29f82392108e5 100644 --- a/solution/0000-0099/0033.Search in Rotated Sorted Array/README_EN.md +++ b/solution/0000-0099/0033.Search in Rotated Sorted Array/README_EN.md @@ -48,6 +48,46 @@ ``` +### **C++** + + + +```cpp +class Solution { +public: + int search(vector& nums, int target) { + if(nums.size() < 1) { + return -1; + } + if(nums.size() == 1) { + return nums[0] == target ? 0 : -1; + } + int n = nums.size(); + int l = 0, r = n - 1; + while(l <= r) { + int mid = (l + r) / 2; + if(nums[mid] == target) { + return mid; + } + if(nums[l] <= nums[mid]) { + if(nums[l] <= target && target < nums[mid]) { + r = mid - 1; + }else { + l = mid + 1; + } + }else { + if(nums[mid] < target && target <= nums[r]) { + l = mid + 1; + }else { + r = mid - 1; + } + } + } + return -1; + } +}; +``` + ### **...** ``` diff --git a/solution/0000-0099/0033.Search in Rotated Sorted Array/Solution.cpp b/solution/0000-0099/0033.Search in Rotated Sorted Array/Solution.cpp index e4fce73a105be..f8b2c1132900e 100644 --- a/solution/0000-0099/0033.Search in Rotated Sorted Array/Solution.cpp +++ b/solution/0000-0099/0033.Search in Rotated Sorted Array/Solution.cpp @@ -8,7 +8,7 @@ class Solution { while(left <= right) { mid = (left + right) / 2; if(nums[mid] == target)return mid; - + if(nums[mid] < nums[right]) { if(nums[right] >= target && nums[mid] < target)left = mid + 1; else right = mid - 1; @@ -18,7 +18,7 @@ class Solution { else left = mid + 1; } } - return -1; + return -1; } }; @@ -30,7 +30,7 @@ class Solution { for(int i = 0;i + +```cpp +class Solution { +public: + bool search(vector& nums, int target) { + if(nums.size() < 1) { + return false; + } + if(nums.size() == 1) { + return nums[0] == target; + } + int n = nums.size(); + int l = 0, r = n - 1; + while(l <= r) { + int mid = (l + r) / 2; + if(nums[mid] == target) { + return true; + } + if(nums[l] == nums[mid] && nums[mid] == nums[r]) { + l++; + r--; + }else if(nums[l] <= nums[mid]) { + // + if(nums[l] <= target && target < nums[mid]) { + r = mid - 1; + }else { + l = mid + 1; + } + }else { + // + if(nums[mid] < target && target <= nums[r]) { + l = mid + 1; + }else { + r = mid - 1; + } + } + } + return false; + } +}; +``` + ### **...** ``` diff --git a/solution/0000-0099/0081.Search in Rotated Sorted Array II/README_EN.md b/solution/0000-0099/0081.Search in Rotated Sorted Array II/README_EN.md index e1850b5072b1d..64c6283b95b32 100644 --- a/solution/0000-0099/0081.Search in Rotated Sorted Array II/README_EN.md +++ b/solution/0000-0099/0081.Search in Rotated Sorted Array II/README_EN.md @@ -51,6 +51,51 @@ ``` +### **C++** + + + +```cpp +class Solution { +public: + bool search(vector& nums, int target) { + if(nums.size() < 1) { + return false; + } + if(nums.size() == 1) { + return nums[0] == target; + } + int n = nums.size(); + int l = 0, r = n - 1; + while(l <= r) { + int mid = (l + r) / 2; + if(nums[mid] == target) { + return true; + } + if(nums[l] == nums[mid] && nums[mid] == nums[r]) { + l++; + r--; + }else if(nums[l] <= nums[mid]) { + // + if(nums[l] <= target && target < nums[mid]) { + r = mid - 1; + }else { + l = mid + 1; + } + }else { + // + if(nums[mid] < target && target <= nums[r]) { + l = mid + 1; + }else { + r = mid - 1; + } + } + } + return false; + } +}; +``` + ### **...** ``` diff --git a/solution/0000-0099/0081.Search in Rotated Sorted Array II/Solution.cpp b/solution/0000-0099/0081.Search in Rotated Sorted Array II/Solution.cpp new file mode 100644 index 0000000000000..f663b14b70699 --- /dev/null +++ b/solution/0000-0099/0081.Search in Rotated Sorted Array II/Solution.cpp @@ -0,0 +1,41 @@ +/** + * Author: Moriarty12138 + */ + class Solution { + public: + bool search(vector& nums, int target) { + if(nums.size() < 1) { + return false; + } + if(nums.size() == 1) { + return nums[0] == target; + } + int n = nums.size(); + int l = 0, r = n - 1; + while(l <= r) { + int mid = (l + r) / 2; + if(nums[mid] == target) { + return true; + } + if(nums[l] == nums[mid] && nums[mid] == nums[r]) { + l++; + r--; + }else if(nums[l] <= nums[mid]) { + // + if(nums[l] <= target && target < nums[mid]) { + r = mid - 1; + }else { + l = mid + 1; + } + }else { + // + if(nums[mid] < target && target <= nums[r]) { + l = mid + 1; + }else { + r = mid - 1; + } + } + } + return false; + } + };