zoukankan      html  css  js  c++  java
  • 【LeetCode】35. 搜索插入位置

    题目描述

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    你可以假设数组中无重复元素。

    示例 1:

    输入: [1,3,5,6], 5
    输出: 2
    

    示例 2:

    输入: [1,3,5,6], 2
    输出: 1
    

    示例 3:

    输入: [1,3,5,6], 7
    输出: 4
    

    示例 4:

    输入: [1,3,5,6], 0
    输出: 0
    

    题解

    暴力匹配

    /* 暴力匹配 */
    class Solution {
        public int searchInsert(int[] nums, int target) {
            if(nums == null || nums.length == 0){
                return 0;
            }
    
            //考虑边界情况
            if(target < nums[0]){
                return 0;
            }
            if(target == nums[nums.length -1]){ 
                return nums.length-1;
            }
            if (target > nums[nums.length - 1]) { //正序,判断最后一位数是否比目标值小
                return nums.length; //如果大,直接返回数组长度
            }
    
            int index = 0;
            for (int i = 0; i < nums.length-1; i++) {
                if(nums[i] == target){
                    return i;
                }
                if ((nums[i] < target && nums[i+1] > target)) { //相邻的两个数比较
                    return i+1;
                }
            }
    
            return index;
        }
    }
    

    二分查找

    class Solution {
        public int searchInsert(int[] nums, int target) {
            // 不需要额外考虑数组为空的情况,因为此时low(0)<=low(-1)不成立,直接返回0
            int low = 0, high = nums.length - 1, mid = 0;
            while(low <= high) {
                mid = (low + high) >> 1;
                if(nums[mid] == target)
                    return mid;
                else if(nums[mid] > target)
                    high = mid - 1;
                else
                    low = mid + 1;
            }
            return low;
        }
    }
    

    精选题解

    踩坑

    实验室一兄弟使用js提交,但是遇到了这样的问题

    let mid = (hi + lo) >> 1;改为let mid = (hi + lo) / 2;

    结果不通过UyWzvt.gif

    • let mid = (hi + lo) >> 1;

    UyRjXV.png

    • let mid = (hi + lo) / 2;

    UyWFpR.png

    请路过的大佬,能不能解决?欢迎评论/私信我!!!

  • 相关阅读:
    对象流(序列化,反序列化)
    随机存取文件流(双性流)
    网络编程
    ByteArrayOutputStream小测试
    Java基础
    IO流实现GBK写入文件然后转换UTF-8
    IO流实现简单的文件的剪切
    递归
    ZKDQ--问题整理
    postman测试上传文件接口
  • 原文地址:https://www.cnblogs.com/melodyjerry/p/13331228.html
Copyright © 2011-2022 走看看