#day01
明天将是训练营正式开始第一天,day1的任务:https://docs.qq.com/doc/DUEpPRUF1QUFrZXhi (任务是提前一天发布,方便已经工作的录友早上通勤可以先看题)
import java.util.Arrays;
public class search_01 {
public int search(int[] nums, int target) {
// int p = -1;
// for(int x = 0; x < nums.length; x++){
// if (nums[x] == target){
// System.out.println(target + "出现在nums中且下标为" + x);
// p = 0;
// }
// }if (p == -1){
// System.out.println(target + "不存在nums中" + p);
// }
//使用二分法破解[left, right]
if (target < nums[0] || target > nums[nums.length-1]){
return -1;
}
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] == target)
return mid;
else if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid - 1;
}
return -1;
}
public void testSearch() {
//nums = [-1,0,3,5,9,12],target = 9
int [] nums = {-1,0,3,5,9,12};
int target = 2;
search(nums, target);
}
public static void main(String[] args) {
search_01 search_01 = new search_01();
search_01.testSearch();
}
}
这段代码是用来计算数组的中间位置的,可以用于二分查找等算法中。
具体解释如下:
假设要查找的数组为nums,left和right分别表示要查找的区间的左右边界。则mid可以通过以下方式计算得到:
int mid = left + ((right - left) >> 1);
其中,">>"是Java中的位运算符,表示右移操作。具体来说,如果将一个整数a右移n位,相当于将a除以2的n次方(即a >> n == a / (2^n))。
因此,"((right - left) >> 1)"的作用是计算(right - left)的一半,即将区间长度除以2。然后将这个结果加上left,就得到了数组的中间位置mid。
使用位运算来计算中间位置可以提高效率,避免了使用除法运算可能带来的性能损失。
总的来说,这段代码的作用是计算数组的中间位置,是一种常用的算法技巧。
696






