Commit b9272fe
committed
33. Search in Rotated Sorted Array
```Solution.c int search(int* nums, int numsSize, int target) { int l = 0, r = numsSize - 1; while (l <= r) { int mid = l + (r - l) / 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; } ``` ```Solution.cpp class Solution { public: int search(vector<int>& nums, int target) { int l = 0, r = nums.size() - 1; while (l <= r) { int mid = l + (r - l) / 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; } }; ``` ```Solution.cs public class Solution { public int Search(int[] nums, int target) { int l = 0, r = nums.Length - 1; while (l <= r) { int mid = l + (r - l) / 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; } } ``` ```Solution.dart class Solution { int search(List<int> nums, int target) { int l = 0, r = nums.length - 1; while (l <= r) { int mid = (l + r) >> 1; 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; } } ``` ```Solution.erl -spec search([integer()], integer()) -> integer(). search(Nums, Target) -> search(Nums, Target, 0, length(Nums) - 1). search(Nums, Target, L, R) when L =< R -> Mid = (L + R) div 2, Val = lists:nth(Mid+1, Nums), LVal = lists:nth(L+1, Nums), RVal = lists:nth(R+1, Nums), if Val =:= Target -> Mid; LVal =< Val -> if LVal =< Target, Target < Val -> search(Nums, Target, L, Mid - 1); true -> search(Nums, Target, Mid + 1, R) end; true -> if Val < Target, Target =< RVal -> search(Nums, Target, Mid + 1, R); true -> search(Nums, Target, L, Mid - 1) end end; search(_, _, _, _) -> -1. ``` ```Solution.ex defmodule Solution do @SPEC search(nums :: [integer], target :: integer) :: integer def search(nums, target) do helper(nums, target, 0, length(nums) - 1) end defp helper(nums, target, l, r) when l <= r do mid = div(l + r, 2) val = Enum.at(nums, mid) cond do val == target -> mid Enum.at(nums, l) <= val -> if Enum.at(nums, l) <= target and target < val, do: helper(nums, target, l, mid - 1), else: helper(nums, target, mid + 1, r) true -> if val < target and target <= Enum.at(nums, r), do: helper(nums, target, mid + 1, r), else: helper(nums, target, l, mid - 1) end end defp helper(_, _, _, _), do: -1 end ``` ```Solution.go func search(nums []int, target int) int { l, r := 0, len(nums)-1 for l <= r { 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 } ``` ```Solution.java class Solution { public int search(int[] nums, int target) { int l = 0, r = nums.length - 1; while (l <= r) { int mid = l + (r - l) / 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; } } ``` ```Solution.js /** * @param {number[]} nums * @param {number} target * @return {number} */ var search = function(nums, target) { let l = 0, r = nums.length - 1; while (l <= r) { let mid = Math.floor((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; }; ``` ```Solution.kt class Solution { fun search(nums: IntArray, target: Int): Int { var l = 0 var r = nums.size - 1 while (l <= r) { val 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 } } ``` ```Solution.php class Solution { /** * @param Integer[] $nums * @param Integer $target * @return Integer */ function search($nums, $target) { $l = 0; $r = count($nums) - 1; while ($l <= $r) { $mid = intdiv($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; } } ``` ```Solution.py class Solution: def search(self, nums: List[int], target: int) -> int: l, r = 0, len(nums) - 1 while l <= r: mid = (l + r) // 2 if nums[mid] == target: return mid if nums[l] <= nums[mid]: if nums[l] <= target < nums[mid]: r = mid - 1 else: l = mid + 1 else: if nums[mid] < target <= nums[r]: l = mid + 1 else: r = mid - 1 return -1 ``` ```Solution.rb # @param {Integer[]} nums # @param {Integer} target # @return {Integer} def search(nums, target) l, r = 0, nums.length - 1 while l <= r mid = (l + r) / 2 return mid if nums[mid] == target if nums[l] <= nums[mid] if nums[l] <= target && target < nums[mid] r = mid - 1 else l = mid + 1 end else if nums[mid] < target && target <= nums[r] l = mid + 1 else r = mid - 1 end end end -1 end ``` ```Solution.rkt #lang racket (define (search nums target) (define (helper l r) (if (> l r) -1 (let* ([mid (quotient (+ l r) 2)] [val (list-ref nums mid)]) (cond [(= val target) mid] [(<= (list-ref nums l) val) (if (and (<= (list-ref nums l) target) (< target val)) (helper l (- mid 1)) (helper (+ mid 1) r))] [else (if (and (< val target) (<= target (list-ref nums r))) (helper (+ mid 1) r) (helper l (- mid 1)))])))) (helper 0 (- (length nums) 1))) ``` ```Solution.rs impl Solution { pub fn search(nums: Vec<i32>, target: i32) -> i32 { let (mut l, mut r) = (0, nums.len() as i32 - 1); while l <= r { let mid = l + (r - l) / 2; if nums[mid as usize] == target { return mid; } if nums[l as usize] <= nums[mid as usize] { if nums[l as usize] <= target && target < nums[mid as usize] { r = mid - 1; } else { l = mid + 1; } } else { if nums[mid as usize] < target && target <= nums[r as usize] { l = mid + 1; } else { r = mid - 1; } } } -1 } } ``` ```Solution.scala object Solution { def search(nums: Array[Int], target: Int): Int = { var l = 0 var r = nums.length - 1 while (l <= r) { val 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 } } -1 } } ``` ```Solution.swift class Solution { func search(_ nums: [Int], _ target: Int) -> Int { var l = 0, r = nums.count - 1 while l <= r { let 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 } } ``` ```Solution.ts function search(nums: number[], target: number): number { let l = 0, r = nums.length - 1; while (l <= r) { let mid = Math.floor((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; } ```1 parent c300764 commit b9272fe
File tree
19 files changed
+375
-0
lines changed- sol/solution/0001-0100/0033
19 files changed
+375
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
0 commit comments