You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
判断出 mid 的位置后,需要恰当地去更新 left,right 的值,更新策略的选择将会直接决定 while 循环结束条件。这里我们让 left 位于旋转数组的左半部分,right位于右半部分,循环条件为 left < right。对于left 的更新每次多向右多移动一个位置:mid+1,right 每次更新为 mid,这样当循环终止时,left和right值相同,并且left指向了最小的数字。
112
120
113
-
int findMin(vector<int>& nums) {
114
-
int left = 0;
115
-
int right = nums.size()-1;
116
-
117
-
while(left<right){
118
-
// When there is no rotate, just return self.nums[start]
119
-
if(nums[left]<nums[right]) return nums[left];
120
-
int mid = left + (right-left) / 2;
121
-
if(nums[left] <= nums[mid]){
122
-
left = mid+1;
123
-
}
124
-
else{
125
-
right = mid;
126
-
}
121
+
```c++
122
+
intfindMin(vector<int>& nums) {
123
+
int left = 0;
124
+
int right = nums.size()-1;
125
+
126
+
while(left<right){
127
+
// When there is no rotate, just return self.nums[start]
128
+
if(nums[left]<nums[right]) return nums[left];
129
+
int mid = left + (right-left) / 2;
130
+
if(nums[left] <= nums[mid]){
131
+
left = mid+1;
132
+
}
133
+
else{
134
+
right = mid;
127
135
}
128
-
return nums[left];
129
136
}
137
+
return nums[left];
138
+
}
139
+
```
130
140
131
141
如果数组中有重复的数字,那么情况稍微有点复杂,当nums[mid] == nums[left] 时,我们没法判断 mid 在哪一边,因此选择对 left 进行简单的 +1 操作。
Copy file name to clipboardExpand all lines: DynamicProgramming/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -107,5 +107,5 @@
107
107
[Dynamic Programming:From Novice to Advanced](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/)
0 commit comments