Hyplus目录
Java
/**
* <a href="https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/">Search in Rotated Sorted Array II</a>
* 数组;二分查找
*/
class Solution {
public boolean search(int[] nums, int target) {
int n = nums.length;
if (n == 0) {
return false;
}
if (n == 1) {
return nums[0] == target;
}
int l = 0, r = n - 1;
while (l <= r) {
int mid = l + (r - l) / 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;
}
}
Go
func search(nums []int, target int) bool {
n := len(nums)
if n == 0 {
return false
}
if n == 1 {
return nums[0] == target
}
l, r := 0, n-1
for l <= r {
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
}
JavaScript
/**
* @param {number[]} nums
* @param {number} target
* @return {boolean}
*/
var search = function (nums, target) {
let n = nums.length;
if (n === 0) {
return false;
}
if (n === 1) {
return nums[0] === target;
}
let l = 0, r = n - 1;
while (l <= r) {
let mid = Math.floor((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;
};
PHP
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Boolean
*/
function search(array $nums, int $target): bool {
$n = count($nums);
if ($n == 0) {
return false;
}
if ($n == 1) {
return $nums[0] == $target;
}
$l = 0;
$r = $n - 1;
while ($l <= $r) {
$mid = floor(($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;
}
}