leetcode刷题 7/12

leetcode刷题笔记 7/12 二分查找专题

Question 1(leetcode:704):

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
思想:这题就是采用二分查找降低复杂度。因为是有序的。

 public int research(int []nums,int begin,int end,int target)
    {
        int center=(begin+end)/2;
       while(begin-end==-1||begin-end==0){
           if(nums[begin]==target)return begin;
           if(nums[end]==target)return end;
           return -1;
       }
       if(nums[center]>target)
       {
        return research(nums,begin,center,target);
       }
       if(nums[center]<target)
       {
           return research(nums,center,end,target);
       }
       return center;
    }

我感觉最后的判断有点冗余,但不知道如何。查看答案有了改进。发现因为center数已经判断为false,所以下一次递归应该不包括center.

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.7 MB, 在所有 Java 提交中击败了99.55%的用户


Question2(leetcode:278):

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API .
思路:运用二分查找来进行迭代。
哎,运行总超时,但发现和官方答案一样,可惜可惜。经过调试发现center=begin+(end-begin)/2,这样修改防止计算溢出。

Question3:(leetcode 55)

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标

思考:这题归为动态规划,不过我首先运用贪心算法来进行求解。

public boolean explore(int[] nums,int begin,int end)
    {
        if(end>=nums.length)
        {
            return true;
        }
        int large=end-1;
        for(int i=begin;i<end;i++)
        {
            if(i+nums[i]>large)
            large=i+nums[i];
        }
        if(large==end-1)return false;
        begin=end;
        end=large+1;     
        return explore(nums,begin,end);
    }

执行用时:2 ms, 在所有 Java 提交中击败了92.14%的用户
内存消耗:40.4 MB, 在所有 Java 提交中击败了21.27%的用户

总结:因为使用了递归,所以在空间上明显较大,运用空间换时间。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值