首页 > 其他分享 >Leecode 搜索插入位置

Leecode 搜索插入位置

时间:2024-03-17 17:57:18浏览次数:19  
标签:StartIdx target nums int MiddleIdx 插入 Leecode 搜索 FinalIdx

Day 2 刷题

  1. 我的思路:利用二分法解决问题,不过由于情况没有好好分类,以及循环判定条件不合适,会出现超出运行时间的bug。
class Solution {
    public int searchInsert(int[] nums, int target) {
        int length = nums.length;
        int StartIdx = 0;
        int FinalIdx = length-1;
        int TargetIdx;
        int MiddleIdx = StartIdx + (FinalIdx-StartIdx)/2;
        // default is flooring
        while(MiddleIdx!=StartIdx){            
            int MiddleVal = nums[MiddleIdx];
            if(MiddleVal > target){      
               FinalIdx = MiddleIdx-1;
            }
            else if(MiddleVal < target){             
                StartIdx = MiddleIdx+1;
            }
            else{
                return MiddleIdx;
            }  
            MiddleIdx = StartIdx + (FinalIdx-StartIdx)/2;          
        }
        if (nums[StartIdx]<target && nums[FinalIdx]>=target){
            TargetIdx = FinalIdx;
        }
        else if(nums[FinalIdx]<target){
            return (FinalIdx+1);
        }   
        else{
            return StartIdx;
        }    
        return TargetIdx;       
    }

}
  1. 力扣官方题解:官方的怎么处理target值等于mid时候值的需要好好学习,呜呜!一直都搞不出来
class Solution {
    public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        int left = 0, right = n - 1, ans = n;
        while (left <= right) {
            int mid = ((right - left) >> 1) + left;
            if (target <= nums[mid]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
}

关于插入的元素可能在数组的两端的问题,巧妙地利用

int ans = nums.length插入的元素target比数组中所有元素大;

mid>=target插入的元素target比数组中所有元素小。

标签:StartIdx,target,nums,int,MiddleIdx,插入,Leecode,搜索,FinalIdx
From: https://www.cnblogs.com/xytang-mini-juan/p/18078882

相关文章

  • Leecode 最长公共前缀
    Day1刷题此题没有写出来,仅附上力扣官方代码:classSolution{publicStringlongestCommonPrefix(String[]strs){if(strs==null||strs.length==0){return"";}Stringprefix=strs[0];intcount=strs.length;......
  • Leecode 将罗马数字转换为整型
    Day1刷题我的解题思路利用罗马数字与整型的转换规律,利用哈希表来生成键值对。classSolution{publicintromanToInt(Strings){intsum=0;HashMap<Character,Integer>RomanInt=newHashMap<Character,Integer>();RomanInt.put('I......
  • 搜索与图论(一)树的遍历/深度/广度/拓扑排序
    文章目录搜索与图论树与图的深度优先遍历举个栗子树的重心思路结论代码如下树与图的广度优先遍历举个例子图中点的层次样例展示代码拓扑排序啥是拓扑排序?解题思路举个栗子题目代码如下搜索与图论树与图的深度优先遍历举个栗子树的重心思路邻接表存储......
  • 代码随想录 第23天 | 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 5
    leetcode:669.修剪二叉搜索树-力扣(LeetCode)classSolution{publicTreeNodetrimBST(TreeNoderoot,intlow,inthigh){//和删除差不多,怕删除的节点的左右孩子节点有符合范围的,所以要每次判断一下,如果有不符合要求的就直接返回上一个节点。if(roo......
  • 3.二分搜索
    定义Step1:计算数据的中点索引值m=(i+j)/2向下取整。i为首元素索引,j为尾元素索引。Step2:判断nums[m]和target的大小关系,分为以下三种情况。当nums[m]<target时,说明target在区间中:i=m+1当nums[m]>target时,说明target在区间中:j=m-1当nums[m]......
  • Leecode 求两数之和
    Day1刷题我的解题思路是按照第一个元素往后排,不重复的找相加的组合,判断是否为target值,时间复杂度较高,为\(\mathcal{O}(n^2)\)。classSolution{publicint[]twoSum(int[]nums,inttarget){intflag=1;while(flag==1){for(in......
  • 【喜大普奔】Dynamo节点搜索功能官方终于优化了
    Hello大家好!我是九哥~用Dynamo的小伙伴,一直都在诟病其检索功能的拉胯,每次搜个节点都是一卡一卡的,好不容易搜完了,还不是自己想要的结果,奈何官方却迟迟没见动作。早先时候,在群里分享过一个节点包:Monocle,装了以后呢,可以使用第三方的搜索栏,效果是杠杠的啊,速度特别快。但是,有......
  • 每日一练:LeeCode-125、验证回文串【字符串+双指针】
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串s,如果它是回文串,返回true;否则,返回false。示例1:输入:s="Aman,aplan,acana......
  • 【洛谷 P8602】[蓝桥杯 2013 省 A] 大臣的旅费 题解(图论+深度优先搜索+树的直径+链式
    [蓝桥杯2013省A]大臣的旅费题目描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同......
  • 代码随想录 第22天 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入
    leetcode:701.二叉搜索树中的插入操作-力扣(LeetCode)classSolution{publicTreeNodeinsertIntoBST(TreeNoderoot,intval){//判断叶子结点,null说明到了,可以赋值。if(root==null){TreeNodenode=newTreeNode(val);return......