Leetcode 704 二分查找
class Solution {
public int search(int[] nums, int target) {
int start = 0,end = nums.length - 1;
while(start <= end) {
int mid = (end + start) >> 1;
if(nums[mid] == target) {
return mid;
}else if(nums[mid] > target) {
end = mid - 1;
}else {
start = mid + 1;
}
}
return - 1;
}
}
Leetcode 27 移除元素
class Solution {
public int removeElement(int[] nums, int val) {
int start = 0, end = nums.length - 1;
while(start <= end) {
if(nums[end] == val) {
--end;
continue;
}else if(nums[start] == val) {
swap(nums,start,end);
}
++start;
}
return end + 1;
}
private void swap(int[] nums,int i, int j) {
int mid = nums[i];
nums[i] = nums[j];
nums[j] = mid;
}
}
Leetcode 35 搜索插入位置
题目链接:35. 搜索插入位置 - 力扣(LeetCode)
class Solution {
public int searchInsert(int[] nums, int target) {
int start = 0, end = nums.length - 1;
while(start <= end) {
int mid = (start + end) >> 1;
if(nums[mid] == target) {
return mid;
}else if(nums[mid] > target) {
end = mid - 1;
}else {
start = mid + 1;
}
}
return start;
}
}
Leetcode 34
题目链接:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)
class Solution {
public int[] searchRange(int[] nums, int target) {
int start = 0, end = nums.length - 1, mid = (start + end) >> 1;
while(start <= end) {
mid = (start + end) >> 1;
if(nums[mid] == target) {
break;
}else if(nums[mid] > target) {
end = mid - 1;
}else {
start = mid + 1;
}
}
if(start > end) {
return new int[] {-1,-1};
}
int t = mid;
while(start < mid) {
int mid1 = (start + mid) >> 1;
if(nums[mid1] == target) {
mid = mid1;
}else {
start = mid1 + 1;
}
}
mid = t;
while(mid < end) {
int mid1 = (mid + end + 1) >> 1;
if(nums[mid1] == target) {
mid = mid1;
}else {
end = mid1 - 1;
}
}
return new int[] {start,end};
}
}
其中, mid1 = (mid + end + 1) >> 1;中的+1是让被结果值靠近上边界,避免死循环。