java实现 力扣 二分查找题解(java蓝桥杯练习记录1)

  • Post author:
  • Post category:java


蓝桥杯备赛练习

1.二分查找

力扣:704题:给你一串有序的数据,查找出目标值target = x,若数据中没有该数据,返回 -1。

练习目的:熟悉数组的基本运用和基础的Java语法

解题思路:有序数据

暴力解法,就是直接遍历该数据,如果目标值相等直接返回该目标值的下标,那这意味着并没有使用到有序这个特点。

二分法如下:


难点

:对于边界值的取舍问题。容易混淆,保持一致。

  • 如果是封闭区间,则端点相等时,该区间是有意义的 while(start <= end),也就是 start = end,呢么对应的边界值一定不是目标值。直接 mid +1/ mid – 1
  • 如果是半开区间,左闭右开,则端点相等时,该值区间是无意义的…while(start < end)。大于目标值时 end = mid ; 左闭右开即下一此比较是不会比较右端点值 。
class Solution {
    public int search(int[] nums, int target) {
       //查找有序的一串数字里的目标值。二分查找
       //1.确定三个值,中间值,两端值
       int mid  ;
       int start = 0;
       int end = nums.length -1;
       //2. 如果值不存在,则返回-1
       if(end < start) {
           return -1;
       }
       //3.当符合二分情况时,循环审查
       while(end >= start) {
           //4.更变查找区间
           mid = (start + end)/2;
           if(nums[mid] > target) {
               end = mid - 1;
           }
           else if(nums[mid] < target) {
               start = mid + 1;
           }
           //5.直至查找于中间值相等的数据
           else if(nums[mid] == target) {
               return mid;
           }
       }
       // 6.循环结束还没找到,就表示没有目标值
       return -1;
    }
}

掌握知识:数组是存储一类相同数据的容器,且是连续的,如若删除插入数据就需要移动其他数据。



版权声明:本文为weixin_62414347原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。