当前位置: 首页 > 编程笔记 >

在C ++中对O(1)额外空间中数组中所有元素的频率和O(n)时间进行计数

丁德义
2023-03-14
本文向大家介绍在C ++中对O(1)额外空间中数组中所有元素的频率和O(n)时间进行计数,包括了在C ++中对O(1)额外空间中数组中所有元素的频率和O(n)时间进行计数的使用技巧和注意事项,需要的朋友参考一下

给定一个范围从值1到n的元素数组。有些元素是重复的,而有些则缺失。目的是找到O(n)时间和O(1)额外空间中所有元素的频率。

输入值

Arr[]= { 1,2,2,3,4,4,4,5 }

输出结果

1→ 1, 2 → 2, 3→ 1, 4→ 3, 5→ 5

说明-最高元素是5,输出显示每个元素出现在数组中的次数。

输入值

Arr[]= { 1,4,4,5,5,5,5 }

输出结果

1→ 1, 2 →0, 3→ 0, 4→ 2, 5→ 4

说明-最高元素是5,输出显示每个元素出现在数组中的次数。

以下程序中使用的方法如下

  • 下面的程序适用于数字在1到10之间的数组。

  • 函数printfrequency(int arr [],int n)将一个数组及其大小n作为输入,并返回数组中存在的1到10之间的数字计数。

  • 我们使arr [i] = arr [i] -1使得每个索引都存储编号为i的频率,在索引0处存储的频率为1,依此类推。

  • 在每个频率上使用forhtml" target="_blank">循环arr [arr [i]%10]将10添加到原始值。

  • 对于x来说,如果数字i在数组中出现x次,则将添加10。

  • 现在对索引i处的所有元素i + 1使用arr [i] / 10的for循环打印频率。

示例

#include<bits/stdc++.h>
using namespace std;
void printfrequency(int arr[],int n){
   int i=0;
   //1变为0,2变为1 ..... 10变为9,所以arr [i]的计数为i-
   for ( i =0; i<n; i++)
      arr[i] = arr[i]-1;
   //因为数字介于1到10之间,所以将所有数字加10(num%10是num本身)
   for (i=0; i<n; i++)
      arr[arr[i]%10] = arr[arr[i]%10] + 10;
   for (i =0; i<10; i++)
      cout << i + 1 << " -> " << arr[i]/10 << endl;
}
int main(){
   int arr[] = {2, 3, 3, 2, 5, 6, 7, 7, 7, 8, 8, 9, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   printfrequency(arr,n);
   return 0;
}

输出结果

1 -> 0
2 -> 2
3 -> 2
4 -> 0
5 -> 1
6 -> 1
7 -> 3
8 -> 2
9 -> 5
10 -> 0
 类似资料:
  • 给定一个二叉树,我想返回最大和子树的根。 最大子树:树的子树,其所有节点的总和大于任何其他子树的总和。 编辑:节点值为整数。 我可以做以下需要O(n^2)的事情。 计算左子树中所有节点的总和 计算右子树中所有节点的总和 如果左子树和右子树的和以及根的值大于当前最大和,则根存储在结果中 以左子树作为根递归调用此函数 以右子树作为根递归调用此函数。这将需要O(n^2) 我可以将其更改为自底向上的方法,

  • 本文向大家介绍在C ++中以小于O(n)的时间在有限范围的数组中查找每个元素的频率,包括了在C ++中以小于O(n)的时间在有限范围的数组中查找每个元素的频率的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个整数数组。数组为A,大小为n。我们的任务是找到阵列中所有元素的频率小于O(n)时间。元素的大小必须小于一个等于M的值。在这里,我们将使用二进制搜索方法。在这里,如果末端元素不同,则将数组

  • 本文向大家介绍在O(n)中的数组中查找重复项,并在C ++中使用O(1)多余的空间,包括了在O(n)中的数组中查找重复项,并在C ++中使用O(1)多余的空间的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个从0到n-1的数字列表。一个数字可以重复尽可能多的次数。我们必须找到重复的数字而不占用任何额外的空间。如果n = 7,则list类似于[5,2,3,5,1,6,6,2,3,4,5]。答案

  • 本文向大家介绍计算O(Log n)时间中给定范围内的斐波那契数和C ++中O(1)空间中的斐波那契数,包括了计算O(Log n)时间中给定范围内的斐波那契数和C ++中O(1)空间中的斐波那契数的使用技巧和注意事项,需要的朋友参考一下 给定具有开始和结束编号的范围,任务是计算在O(Log n)时间和O(1)空间中给定范围之间可用的斐波那契数的总数。 什么是斐波那契数 斐波那契数是称为斐波那契数列的

  • 例如:{1,2,3,4,-3}输出将是4,因为1+2+3+4的和是最大和,该序列中有4个数字 我知道如何用O(n^2)的时间复杂度来做这件事,但不知道如何用O(n)的帮助?:)

  • 给定一个整数数组arr,计算元素x,使得x 1也在arr中。如果arr中有重复项,请分别计数。 示例1:输入:arr=[1,2,3]输出:2说明:1和2被计数,因为2和3在arr中。 示例2:输入:arr=[1,1,2]输出:2解释:1计数两次,原因2在arr中。 示例3:输入:arr=[1,1,3,3,5,5,7,7]输出:0说明:没有计算数字,因为arr中没有2、4、6或8。 示例4:输入:a