假设我们有一个整数数组。数组为A,大小为n。我们的任务是找到阵列中所有元素的频率小于O(n)时间。元素的大小必须小于一个等于M的值。在这里,我们将使用二进制搜索方法。在这里,如果末端元素不同,则将数组递归分为两部分;如果两个末端元素相同,则意味着数组中的所有元素与已排序的数组相同。
#include<iostream> #include<vector> using namespace std; void calculateFreq(int arr[], int left, int right, vector<int>& frequency) { if (arr[left] == arr[right]) frequency[arr[left]] += right - left + 1; else { int mid = (left + right) / 2; calculateFreq(arr, left, mid, frequency); calculateFreq(arr, mid + 1, right, frequency); } } void getAllFrequency(int arr[], int n) { vector<int> frequency(arr[n - 1] + 1, 0); calculateFreq(arr, 0, n - 1, frequency); for (int i = 0; i <= arr[n - 1]; i++) if (frequency[i] != 0) cout << "Frequency of element " << i << " is " << frequency[i] << endl; } int main() { int arr[] = { 10, 10, 10, 20, 30, 30, 50, 50, 80, 80, 80, 90, 90, 99 }; int n = sizeof(arr) / sizeof(arr[0]); getAllFrequency(arr, n); }
输出结果
Frequency of element 10 is 3 Frequency of element 20 is 1 Frequency of element 30 is 2 Frequency of element 50 is 2 Frequency of element 80 is 3 Frequency of element 90 is 2 Frequency of element 99 is 1
本文向大家介绍在C ++中,在频率大于或等于n / 2的排序数组中查找元素。,包括了在C ++中,在频率大于或等于n / 2的排序数组中查找元素。的使用技巧和注意事项,需要的朋友参考一下 考虑我们有一个大小为n的数组。该数组已排序。有一个元素的频率大于或等于n / 2,其中n是数组中元素的数量。因此,如果数组类似于[3,4,5,5,5],则输出将为5。 如果我们仔细观察这些类型的数组,我们可以很容
本文向大家介绍在C ++中对O(1)额外空间中数组中所有元素的频率和O(n)时间进行计数,包括了在C ++中对O(1)额外空间中数组中所有元素的频率和O(n)时间进行计数的使用技巧和注意事项,需要的朋友参考一下 给定一个范围从值1到n的元素数组。有些元素是重复的,而有些则缺失。目的是找到O(n)时间和O(1)额外空间中所有元素的频率。 输入值 输出结果 说明-最高元素是5,输出显示每个元素出现在数
我有两个关于确定2个算法的时间复杂度的问题。 用比较法从一组n个不同的数字中确定最小的3个数字。 这3个元素可以使用O(log2n)比较来确定。 O(log2n)不够,但是可以使用n+O(1)比较来确定它们。 n+O(1)不够,但是可以使用n+O(logn)比较来确定它们。 n+O(logn)不够,但是可以使用O(n)比较来确定它们。 以上都没有。 这里,我想到的方法是取3个变量(例如:min1、
问题内容: 我只需要找到1D中最小的第n个元素。 例如: 我想获得第五个最小的元素,所以我想要的输出是。 我当前的解决方案是这样的: 但是,找到5个最小的元素然后再选择最大的元素对我来说似乎很笨拙。有更好的方法吗?我是否缺少一个可以实现目标的功能? 有些问题的标题与此相似,但我没有看到任何答案。 编辑: 我本来应该提到它,但是性能对我来说很重要。因此,虽然不错的解决方案对我来说不起作用。 结果:
这是一个面试问题。我们有一个大小为N的整数数组,包含0到N-1之间的元素。一个数字可能出现两次以上。目标是找到总和为给定数字X的对。 我使用了一个辅助数组,该数组包含主数组的元素计数,然后根据辅助数组重新排列主数组,以便对主数组进行排序,然后搜索对。 但是面试官想要空间复杂度常数,所以我告诉他对数组进行排序,但这不是时间复杂度解。他想要O(n)解。 是否有任何方法可以在没有任何额外空间的情况下在O
假设我有一个由以下类组成的数组,按y升序排序: 如何在log(N)time中给定的最小值和最大值范围内找到数组中y值的Obj项目数? 我曾想过使用二进制搜索和减法来查找最小和最大元素的位置,但这不是2 log(n),因为它搜索了两次吗?