美文网首页
在有序数组中找到某个数

在有序数组中找到某个数

作者: cp3_1dbc | 来源:发表于2018-03-25 18:38 被阅读0次

条件是数组中可能出现重复的数字,很容易就会想到折半查找,但是对于重复元素怎么处理?

解决方法一:最先想到的就是二分查找找到待查找的数后,若存在相同的数,继续向左查找,直到找到第一个数为止。但是这样最坏的time cost是o(n)。

怎么样可以达到最坏情况下也是o(logn)呢,想到了下面的方法

解决方法二:如果是最左边的数则是我们要找的;否则,right=mid-1继续查找

talk is cheap, show you my code


#include <iostream>

int find_first_num(const vector<int> v, int n)
{
    int res = -1;
    int left = 0;
    int right = v.size() - 1;
    while (left <= right)
    {
        int mid = (left + right) >> 1;
        if (v[mid] < n)
        {
            left = mid + 1;
        }
        else if (v[mid] > n)
        {
            right = mid - 1;
        }
        else
        {
            if (0 == mid || (mid > 0 && v[mid-1] != v[mid]))
            {
                res = mid;
                break;
            }
            else
            {
                right = mid - 1;
            }
        }
    }
    
    return res;
}

int main() {
    vector<int> v{1, 2, 3, 3, 6, 9};
    cout << find_first_num(v, 3);
    
    vector<int> v1{2, 2, 3, 3, 6, 9};
    cout << find_first_num(v, 2);
    
    vector<int> v2{2, 2, 2, 2, 2, 2};
    cout << find_first_num(v, 2);
}

运行结果

2
2
1

相关文章

  • 005-在无序数组中查找最长的连续数字长度

    描述 现在有一个没有排序的数组,在这个数组中找到最长的连续数字。 例如:数组[100, 4, 200, 1, 3,...

  • 在有序数组中找到某个数

    条件是数组中可能出现重复的数字,很容易就会想到折半查找,但是对于重复元素怎么处理? 解决方法一:最先想到的就是二分...

  • 每天一题LeetCode【第2天】

    T1. Two Sum 【Easy】 题目 给定一个数组和一个目标数,从数组中找到两个数,使得这两个数之和等于这个...

  • 二分搜索

    需求: 从一个数组中找到某个数 原理: 1 在方法中,需要先对数组排序,排列成从大到小或从小到大的有序数组. ...

  • 2021-01-07 leetcode题解

    Two Sum题:给一个数组vector和一个数target,在数组中找到两个元素的和相加等于target,并返回...

  • Leetcode.347.Top K Frequent Elem

    题目 给定一个数组,输出出现频率最多的K个数。 思路 先用map计算每个数的出现频率,将map转化为数组进行倒序排...

  • 快速排序

    快速排序算法思想 快速排序和归并排序是互补的,归并排序将整个数组分成小数组,然后将排好序的小数组归并以将整个数组排...

  • leetcode 中等题(部分三)

    A:数组类53 Maximum Subarray从一个数组中找到连续的一个子数组,使得相加的和最大 300. Lo...

  • 如何在大量数组中快速找到目标值的下标

    在js中我们常常会遇到这样的问题,在一个数组中找到目标值的位置。当这个数组很小的时候很简单,直接for循环遍历,把...

  • 一个数组中找最大值和最小值

    这个不是lintcode里的题目,但是感觉很经典,放在这里。给定一个数组,在这个数组中找到最大值和最小值。最近在看...

网友评论

      本文标题:在有序数组中找到某个数

      本文链接:https://www.haomeiwen.com/subject/jvhkcftx.html