[简单-剑指 Offer 53 - I. 在排序数组中查找数字 I]

时间:2023-03-09 16:32:16
[简单-剑指 Offer 53 - I. 在排序数组中查找数字 I]

[简单-剑指 Offer 53 - I. 在排序数组中查找数字 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:使用multiset数据结构的count函数,直接计算某个数字在数据结构中的个数

class Solution {
public:
multiset<int>mySet; public:
int search(vector<int>& nums, int target) {
int size = nums.size();
for (int i = 0; i<size; i++) {
mySet.insert(nums[i]);
}
return mySet.count(target);
}
};

方法2:编译数组,一个个判断数组元素是否与目标数值相同,相同则加1

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

方法3:直接使用计数函数

class Solution {
public:
int search(vector<int>& nums, int target) {
int count = count(nums.begin(), nums.end(), target);
return count;
}
}

方法4:既然数组是排好序的,那就可以使用二分查找算法


方法5:使用map,数组元素作为map的key,相同元素的个数作为data

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