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;
        }
    };
    
  • 相关阅读:
    docker 简单使用
    apache 目录网站显示indexs
    MySQL索引失效的几种情况
    mysql 基本常用语句
    UNIX 版本
    B语言的发明者 Ken Thomson & C语言的发明者Dennis Ritchie
    My SQl 积累
    C# DGV多行选择
    C#中很模糊查询DGV中数据的两种方法
    网址
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13357699.html
Copyright © 2011-2022 走看看