zoukankan      html  css  js  c++  java
  • 剑指OFFER_在排序数组中查找数字 I

    剑指OFFER_在排序数组中查找数字 I

    题目

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

    示例 1:

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

    示例 2:

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

    限制:

    0 <= 数组长度 <= 50000
    

    思路

    最简单的方法应该是遍历数组,但是这样太简单了,感觉会超时,所以就没有尝试;

    于是我写了一个二分查找,使得程序可以更快的找到目标数字的位置,如果不存在返回-1;

    找到目标数字的位置,它的前后可能有重复的,因此只需要前后搜索一下就可以了:

    代码

    typedef vector<int> vec;
    class Solution {
    public:
        int binarySearch(vec &v, int begin, int end, int target) {
            int mid = (begin+end)/2;
            if (v[mid] == target) {
                return mid;
            } else if (end-begin<=1) {
                if (v[end] == target) {
                    return end;
                }else {
                    return -1;
                }
            } else if (v[mid] > target) {
                return binarySearch(v, begin, mid, target);
            } else {
                return binarySearch(v, mid, end, target);
            }
        }
    
        int search(vector<int>& nums, int target) {
            int len = nums.size(), ans = 0;
            if (len==0) return 0;
            int pos = binarySearch(nums, 0, len-1, target);
            if (pos == -1) return 0;
    
            for (int i=pos; i>=0; i--) {
                if(nums[i] == target) {
                    ++ans;
                }else{
                    break;
                }
            }
            for (int i=pos; i<len; i++) {
                if(nums[i] == target) {
                    ++ans;
                }else{
                    break;
                }
            }
            return ans-1;
        }
    };
    
  • 相关阅读:
    Arduino开发版学习计划--直流电机
    Arduino开发版学习计划--蜂鸣器
    社交网络编程API之iOS系统自带分享
    iOS解析XML实现省市区选择
    Frameworks(不定时更新)
    NSLayoutConstraint
    Categories  VS Extensions (分类 vs 扩展)
    strong vs copy
    折半查找
    Block
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13357699.html
Copyright © 2011-2022 走看看