【LeetCode】剑指 Offer 53 – I. 在排序数组中查找数字 I – Go 语言题解

导读:本篇文章讲解 【LeetCode】剑指 Offer 53 – I. 在排序数组中查找数字 I – Go 语言题解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


一、题目描述

统计一个数字在排序数组中出现的次数。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

提示:

0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums 是一个非递减数组
-109 <= target <= 109

二、我的题解 – 非全部遍历

由于数组是非递减的,那么 target 数如果有多个,也一定是相连的。

所以我的方法是:

  1. 找到第一个 target
  2. 往后遍历计数,直到不等于 target

代码:

func search(nums []int, target int) int {

    if len(nums) == 0{
        return 0
    }
    
    i:=0
    for nums[i]!=target {
        i++
        if i == len(nums){
            return 0
        }
    }
    
    s := 0
    for nums[i] == target {
        s++
        i++
        if i == len(nums) {
            return s
        }
    }
    
    return s

}

评判结果:
在这里插入图片描述


三、二分法

其实一拿到题目,看到递增数组,我的第一反应就是二分法,但是感觉这个写出来没上面的简洁,也没上面的容易理解。

思路:

  1. i,j:= 0,len(nums)-1,两个指针表示一个区间,通过比较区间中值和 target 的大小关系,不断缩小区间。
  2. 直到区间中值指到 target ,跳出。
  3. i,j 分别等于当前中值 m,m+1,i 向前找有多少个 target ,j 向后找有多少个 target 。加起来就是 target 总数。

代码:

func search(nums []int, target int) int {
    if len(nums) == 0{
        return 0
    }else if len(nums) == 1 && nums[0] == target{
        return 1
    }
    
    i,j,m := 0,len(nums)-1,0

    for i < j {
        m = i+(j-i)/2
        if nums[m]<target{
            i = m+1
        }else if nums[m]>target{
            j = m-1
        }else{
            break
        }
    }

    s:= 0

    if i == j && nums[i]==target{
        return 1
    }
    if i!=j{
        i,j = m,m+1
        for nums[i]==target{
            s++
            i--
            if i == -1{
                break
            }
        }
        for nums[j]==target{
            s++
            j++
            if j == len(nums){
                break
            }
        }
    }
    
     return s
   
}

评判结果:

在这里插入图片描述

但我感觉这个二分法写的不好,以后可以再改进。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118965.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!