当前位置:   article > 正文

2013年考研计算机统考408真题算法题_2013年计算机408数据结构算法题

2013年计算机408数据结构算法题

题目如图所示

算法思想(C语言):

题目告之序列A中所有的元素小于其序列长度n,大于等于0,故有了以空间换时间的想法。动态申请一个数组,在第一个循环中初始化为0,在第二个循环中以A中元素作为下标,记录A中各个不同元素的出现次数,在第三个循环中也以A中元素作为下标,直到或者找到一个出现次数大于n/2的元素,记录在k中,或者没有找到,由于k已经初始化为-1,无论那种情况直接输出k的值就可以。

个人代码如下

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. void Func(int A[], int n)
  4. {
  5. //动态申请一个数组,用于记录A中各个不同元素的出现次数
  6. int* arr = (int*)malloc(n * sizeof(int));
  7. //初始化为0
  8. for (int i = 0; i < n; i++)
  9. arr[i] = 0;
  10. //以A中元素作为下标,记录A中各个不同元素的出现次数
  11. for (int i = 0; i < n; i++)
  12. arr[A[i]]++;
  13. //用k记录是否找到一个元素出现次数大于n / 2
  14. int k = -1;
  15. for (int i = 0; i < n; i++)
  16. {
  17. if (arr[A[i]] > n / 2)
  18. {
  19. k = A[i];
  20. break;
  21. }
  22. }
  23. //输出k,并释放申请的动态数组
  24. printf("%d", k);
  25. free(arr);
  26. }
  27. int main()
  28. {
  29. int n;
  30. printf("请输入数组长度\n");
  31. scanf("%d", &n);
  32. int* A = (int*)malloc(n * sizeof(int));
  33. printf("请输入数据\n");
  34. for (int i = 0; i < n; i++)
  35. scanf("%d", &A[i]);
  36. Func(A, n);
  37. return 0;
  38. }

 

时间复杂度O(3n),空间复杂度O(n)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/576615
推荐阅读
相关标签
  

闽ICP备14008679号