Leetcode53-1

Leetcode53-1:在排序数组中查找数字 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

解法一:基于flag标记的暴力法 (执行用时20ms,内存消耗13.2MB)

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int flag = 0;
        for (int i = 0; i<int(nums.size()); i++)
        {
            if (nums[i] == target)
                flag++;

        }
        return flag;

    }
};

解法二:基于unordered_map的方法 (执行用时44ms,内存消耗13.4MB)

class Solution2 {
public:
    int search(vector<int>& nums, int target) {
        unordered_map<int, int> a;
        for (int i = 0; i<int(nums.size()); i++)
            a[nums[i]]++;
        unordered_map<int, int>::iterator it;
        it = a.find(target);
        if (it != a.end())
        {
            return it->second;
        }
        return 0;

    }
};

解法三:基于ower_bound和upper_bound的方法 (执行用时44ms,内存消耗13.4MB)

/****************************************
基于ower_bound和upper_bound的方法 (执行用时44ms,内存消耗13.4MB)

upper_bound():返回的是被查序列中第一个大于查找值得指针;
lower_bound():返回的是被查序列中第一个大于等于查找值的指针;
*****************************************/
class Solution3 {
public:
    int search(vector<int>& nums, int target) {
        int low = lower_bound(nums.begin(), nums.end(), target) - nums.begin();
        int upp = upper_bound(nums.begin(), nums.end(), target) - nums.begin();
        return upp - low;
    }
};

main()函数

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;

int main()
{
    vector<int> nums;
    cout << "请输入有序数组的大小: " << endl;
    int Size;
    cin >> Size;
    int Currval;
    cout << "请输入有序数组的元素: " << endl;
    for (int i = 0; i < Size; i++)
    {
        cin >> Currval;
        nums.push_back(Currval);
    }
    int target;
    cout << "请输入查找元素: " << endl;
    cin >> target;
    Solution answer;
    cout << "查找元素在数组中出现的次数为:" << answer.search(nums, target) << endl;

    system("pause");
    return 0;
}

   转载规则


《Leetcode53-1》 赵小亮 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Leetcode219 Leetcode219
Leetcode219:存在重复元素 II 题目描述Leetcode219: 存在重复元素 II 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j, 使得 nums [i] = nums [j],并且 i 和
2020-04-20
下一篇 
Leetcode371 Leetcode371
Leetcode371:两整数之和 题目描述       不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a = 1, b
2020-04-20
  目录