首页 > 其他分享 >每日一题(LeetCode·704)二分查找

每日一题(LeetCode·704)二分查找

时间:2024-06-10 18:05:40浏览次数:20  
标签:二分 target nums 704 元素 mid int 数组 LeetCode

题目:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

解题思路:利用二分查找法,二分查找的基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较,如果x=a [n/2],则找到x,算法中止;如果x<a [n/2],则只要在数组a的左半部分继续搜索x,如果x>a [n/2],则只要在数组a的右半部搜索x.

步骤:

  1. 初始化两个指针,一个指向数组的开始(low),一个指向数组的结束(high)。
  2. 计算中间元素的索引 mid = (low + high) >>> 2(使用整数除法)。
  3. 检查中间元素是否是要查找的元素。如果是,返回 mid。
  4. 如果要查找的元素小于中间元素,更新 high = mid - 1,  并在数组的左半部分重复步骤 2 和 3。
  5. 如果要查找的元素大于中间元素,更新 low = mid + 1,并在数组的右半部分重复步骤 2 和 3。
  6. 如果 low > high,说明元素不在数组中,返回 -1 或其他表示未找到的值。

代码如下:

class Solution {
    public int search(int[] nums, int target) {
        int i = 0;
        int j = nums.length - 1;
        while (i <= j) {
            int mid = (i + j) >>>1;
            if (target > nums[mid]) {
                i = mid +1;
            }else if (target < nums[mid]) {
                j = mid - 1;
            }else {
                return mid;
            }
        }
        return -1;
    }
}

小伙伴快去试试吧!!!

标签:二分,target,nums,704,元素,mid,int,数组,LeetCode
From: https://blog.csdn.net/qq_54839572/article/details/139565322

相关文章

  • 每日一题(LeetCode 34题,在排序数组中查找元素的第一个和最后一个元素)
    题目:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题示例1:输入:nums=[5,7,7,8,8,10],......
  • Leetcode-807
    题目807.保持城市天际线难度:中等给你一座由nxn个街区组成的城市,每个街区都包含一座立方体建筑。给你一个下标从0开始的nxn整数矩阵grid,其中grid[r][c]表示坐落于r行c列的建筑物的高度。城市的天际线是从远处观察城市时,所有建筑物形成的外部轮廓。从东、......
  • Leetcode-342
    题目4的幂难度:简单给定一个整数,写一个函数来判断它是否是4的幂次方。如果是,返回true;否则,返回false。整数n是4的幂次方需满足:存在整数x使得n==4x示例1:输入:n=16输出:true示例2:输入:n=5输出:false示例3:输入:n=1输出:true提示:-231<=n<=......
  • Leetcode-42
    题目42.接雨水难度:困难给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部......
  • Leetcode-852
    题目852.山脉数组的峰顶索引难度:简单山脉数组arrarr.length>=3存在i(0<i<arr.length-1)使得:arr[0]<arr[1]<...arr[i-1]<arr[i]arr[i]>arr[i+1]>...>arr[arr.length-1]给你由整数组成的山脉数组arr,返回任何满足arr[0]<arr[1]<...arr[......
  • Leetcode-35
    题目35.搜索插入位置难度:简单给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。示例1:输入:nums=[1,3,5,6],target=5输出:2示例2:输入:nums=......
  • Leetcode-22
    题目22.括号生成难度:中等数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且**有效的**括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8来源:力扣(Lee......
  • Leetcode 力扣114. 二叉树展开为链表 (抖音号:708231408)
    给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2......
  • Leetcode-1221
    题目1221.分割平衡字符串难度:简单在一个平衡字符串中,'L'和'R'字符的数量是相同的。给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。返回可以通过分割得到的平衡......
  • Leetcode-13
    题目13.罗马数字转整数难度:简单罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做II,即为两个并列的1。......