首页 > 其他分享 >20240113-力扣704二分查找

20240113-力扣704二分查找

时间:2024-01-14 21:11:20浏览次数:26  
标签:二分 return target nums 704 力扣 20240113 int 查找

leetcode链接:

https://leetcode.cn/problems/binary-search/solutions/980494/er-fen-cha-zhao-by-leetcode-solution-f0xw/

代码随想录链接:

https://programmercarl.com/0704.二分查找.html#算法公开课

考点:

二分查找

解决代码:

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

        }
        if(target != nums[i]){
            return -1;
        }
        return i;
    }
}

思路:
给定的是有序数组,先判断小于最小或者大于最大,直接返回-1;
指针在0和size-1,如果等于最前面的值或者最后面的值则直接返回下标(也可能没必要);
获取i与j的平均值的数值大小作为下标,与target比较,相等返回下标,大于target则表示数据只可能在二分的左半部分,否则则在右半部分;
边界条件是i<j-1,不符合条件的时候跳出,若相等则表示最后一次找到了目标,若不相等则表示目标值不在列表中,返回-1;

优秀代码:

思路:

问题:

边界条件的确定

问题解决:

收获与思考:

标签:二分,return,target,nums,704,力扣,20240113,int,查找
From: https://www.cnblogs.com/jllpersist/p/17964204

相关文章

  • 力扣11-盛最多水的容器
    难度:【中等】题目给画了图,比较方便理解。第一个思路是把所有的面积都计算一遍,显然时间复杂度很高;接着思考第二个方法,使用双指针,通过移动首尾指针来计算面积:如果下一个height超过当前值,就移动该指针,直到两个指针相遇。写完代码运行超时。超时是因为死循环了,因为上面的移动指针的......
  • 力扣543-二叉树的直径
    难度:【简单】定义:在一个二叉树中,任意两个节点之间的路径中最长的路径的长度称为其直径。路径长度由两个节点之间经过的“边”表示,而不是节点数。且二叉树的直径不一定经过根节点。先大致看了官方解法,不理解,心情暴躁没看懂,就自己瞎写。起初不理解直径不一定经过根节点。根据示......
  • 力扣461-汉明距离
    难度:【简单】“汉明距离”是指两个整数的二进制表示中二进制位不同的对数(或组数)。汉明距离应用广泛,可以用于检测编码错误、量化字符串差异(信息论)等。根据定义,求两个整数的汉明距离,就是求两个整数二进制位不同的组数。根据异或运算,相同为假相异为真,两数异或之后统计二进制位为1......
  • 力扣448-找到所有数组中消失的数字
    难度:【简单】常规笨方法做一遍:先遍历一遍记录到哈希表中,再从1到n遍历一遍,不在哈希表中的记入返回数组中,时空复杂度都是O(n)。尝试优化空间复杂度到O(1):先填满返回数组,再遍历原数组,原数组中出现的元素删掉。也是朴素的笨方法,所以超出了时间限制。这让我体会到了数组查找元素的时......
  • 【力扣】-28. 找出字符串中第一个匹配项的下标|刷题打卡-JS
    给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹配。......
  • 【力扣】-39. 组合总和|刷题打卡-JS
    给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个......
  • 【力扣】-41. 缺失的第一个正数|刷题打卡-JS
    给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3示例2:输入:nums=[3,4,-1,1]输出:2示例3:输入:nums=[7,8,9,11,12]输出:1提示:1<=nums.length<=5*......
  • 在不使用内置函数和中间变量的情况交换数字LeetCode力扣题解面试题16.01
    #异或法#Kotlin```KotlinclassSolution{  funswapNumbers(numbers:IntArray):IntArray{    numbers[0]=numbers[0]xornumbers[1]    numbers[1]=numbers[1]xornumbers[0]    numbers[0]=numbers[0]xor......
  • day01 代码随想录算法训练营 704. 二分查找
    题目:leetcode704.二分查找 感悟:困扰我多年的二分查找对于边界的判断,我终于理解了。难点:难点1:定边界rightright=len(nums)还是len(nums)-1 难点2:while循环whileleft<right还是left<=right 难点3:mid取值mid=right-1还是mid=right  结论:1.自己确定......
  • 【力扣】-15. 三数之和|刷题打卡-JS
    给你一个整数数组 nums ,判断是否存在三元组 [nums[i],nums[j],nums[k]] 满足 i!=j、i!=k 且 j!=k ,同时还满足 nums[i]+nums[j]+nums[k]==0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums=[-1,0,1,2,-1,-4......