leetcode 35.搜索插入位置

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

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

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

示例 2:

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

示例 3:

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

算法思路:其实一看这道题大家应该就都有了解题思路,可以直接一个for循环,找到target,找到就返回下标,没找到就把target插到排序数组中,并返回下标,该解法的时间复杂度为0(n),但题目要求时间复杂度必须为O(logn),所以我们首先想到的就是二分法,需要设置两个指针,每次都从两个指针的中间位置查找,代码如下:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
           int len=nums.size();
           int high=len-1;
           int low=0;
           while(low<=high){
               int mid=low+((high-low)/2);
               if(nums[mid]<target)
                   low=mid+1;
               if(nums[mid]>target)
                   high=mid-1;
               if(nums[mid]==target)
                   return mid;      
           }
              return low;
    }
};

最近我在学习哈希算法,所以想用哈希来解决这个问题,我的思路是,先把数组存到哈希中,key存下标,value存值,然后遍历数组,找到target,找到返回key,没找到就 找第一个大于target的数,然后把target存进去,再把大于target的数重新存进去。(这样好像很麻烦,我没有考虑时间复杂度,主要是想学习哈希的用法)

不知道我的这个思路有没有问题,希望大家可以评论补充,可以的话能不能实现我的思路,想看看具体代码,大家一起交流,谢谢谢谢~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值