@@ -208,6 +208,8 @@ var searchMatrix = function (matrix, target) {
208208
209209##### [ 278. 第一个错误的版本] ( https://leetcode-cn.com/problems/first-bad-version/ )
210210
211+ 假设你有 n 个版本 [ 1, 2, ..., n] ,你想找出导致之后所有版本出错的第一个错误的版本。 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
212+
211213``` js
212214var solution = function (isBadVersion ) {
213215 /**
@@ -234,3 +236,137 @@ var solution = function (isBadVersion) {
234236};
235237```
236238
239+ ##### [ 153. 寻找旋转排序数组中的最小值] ( https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/ )
240+
241+ 假设按照升序排序的数组在预先未知的某个点上进行了旋转( 例如,数组 [ 0,1,2,4,5,6,7] 可能变为 [ 4,5,6,7,0,1,2] )。 请找出其中最小的元素。
242+
243+ ``` js
244+ var findMin = function (nums ) {
245+ let start = 0
246+ let end = nums .length - 1
247+ let mid = 0
248+ while (start + 1 < end) {
249+ let mid = start + ((end - start) >> 1 )
250+ if (nums[mid] > nums[end]) { // 以最后的为target
251+ start = mid
252+ } else {
253+ end = mid
254+ }
255+ }
256+ if (nums[start] > nums[end]) {
257+ return nums[end]
258+ }
259+ return nums[start]
260+ };
261+ ```
262+
263+ ##### [ 154. 寻找旋转排序数组中的最小值 II] ( https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/ )
264+
265+ 给你一个可能存在 ** 重复** 元素值的数组 ` nums ` ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 ** 最小元素** 。
266+
267+ ``` js
268+ var findMin = function (nums ) {
269+ let start = 0
270+ let end = nums .length - 1
271+ let mid = 0
272+ while (start + 1 < end) {
273+ while (start < end && nums[start] === nums[start + 1 ]) {
274+ start++
275+ }
276+ while (start < end && nums[end] === nums[end - 1 ]) {
277+ end--
278+ }
279+ let mid = start + ((end - start) >> 1 )
280+ if (nums[mid] >= nums[end]) {
281+ start = mid
282+ } else {
283+ end = mid
284+ }
285+ }
286+ if (nums[start] > nums[end]){
287+ return nums[end]
288+ }
289+ return nums[start]
290+ };
291+ ```
292+
293+ ##### [ 33. 搜索旋转排序数组] ( https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ )
294+
295+ 给你 ** 旋转后** 的数组 ` nums ` 和一个整数 ` target ` ,如果 ` nums ` 中存在这个目标值 ` target ` ,则返回它的下标,否则返回 ` -1 ` 。
296+
297+ ``` js
298+ var search = function (nums , target ) {
299+ let start = 0
300+ let end = nums .length - 1
301+ let mid = 0
302+ while (start + 1 < end) {
303+ let mid = start + ((end - start) >> 1 )
304+ if (nums[mid] === target) {
305+ return mid
306+ }
307+ if (nums[start] < nums[mid]) {
308+ if (nums[start] <= target && target <= nums[mid]) {
309+ end = mid
310+ } else {
311+ start = mid
312+ }
313+ }
314+ if (nums[end] > nums[mid]) {
315+ if (nums[end] >= target && nums[mid] <= target) {
316+ start = mid
317+ } else {
318+ end = mid
319+ }
320+ }
321+ }
322+ if (nums[start] === target) {
323+ return start
324+ } else if (nums[end] === target) {
325+ return end
326+ }
327+ return - 1
328+ };
329+ ```
330+
331+ ##### [ 81. 搜索旋转排序数组 II] ( https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/ )
332+
333+ 同上,数字可重复。
334+
335+ ``` js
336+ var search = function (nums , target ) {
337+ let start = 0
338+ let end = nums .length - 1
339+ let mid = 0
340+ while (start + 1 < end) {
341+ let mid = start + ((end - start) >> 1 )
342+ if (nums[mid] === target) {
343+ return true
344+ }
345+ while (start < end && nums[start] === nums[start + 1 ]) {
346+ start++
347+ }
348+ while (start < end && nums[end] === nums[end - 1 ]) {
349+ end--
350+ }
351+ if (nums[start] < nums[mid]) {
352+ if (nums[start] <= target && target <= nums[mid]) {
353+ end = mid
354+ } else {
355+ start = mid
356+ }
357+ }
358+ if (nums[end] > nums[mid]) {
359+ if (nums[end] >= target && nums[mid] <= target) {
360+ start = mid
361+ } else {
362+ end = mid
363+ }
364+ }
365+ }
366+ if (nums[start] === target || nums[end] === target) {
367+ return true
368+ }
369+ return false
370+ };
371+ ```
372+
0 commit comments