【发布时间】:2015-12-05 14:32:59
【问题描述】:
给定一个由 N 个正整数组成的数组 A1, A2 ,..., AN。
另外,给定 Q 更新形式:- i j:更新 Ai = j。 1≤i≤N。
执行所有更新,并在每次更新后报告阵列的报告模式。因此,返回一个 Q 个元素的数组,其中第 i 个元素是执行第 i 次更新后数组的模式。
注意事项
- 众数是数组中出现频率最高的元素。
- 如果可能有多种模式,则返回最小的一种。
- 更新数组输入是通过 Q*2 数组进行的,其中每一行代表一个更新。
例如,
A=[2, 2, 2, 3, 3]
Updates= [ [1, 3] ]
[ [5, 4] ]
[ [2, 4] ]
A = [3, 2, 2, 3, 3] after 1st update.
3 is mode.
A = [3, 2, 2, 3, 4] after 2nd update.
2 and 3 both are mode. Return smaller i.e. 2.
A = [3, 4, 2, 3, 4] after 3rd update.
3 and 4 both are mode. Return smaller i.e. 3.
Return array [3, 2, 3].
Constraints
1 ≤ N, Q ≤ 105
1 ≤ j, Ai ≤ 109
我使用简单数组的实现有什么问题?
/**
* @input A : Integer array
* @input n1 : Integer array's ( A ) length
* @input B : 2D integer array
* @input n21 : Integer array's ( B ) rows
* @input n22 : Integer array's ( B ) columns
*
* @Output Integer array. You need to malloc memory, and fill the length in len1
*/
int* getMode(int* A, int n1, int** B, int n21, int n22, int *len1) {
int *ans = (int *) malloc (sizeof(int)); // dynamic allocation of array
int x = 0,i,j;
for(i = 0; i < n1 ; i ++ )
for(j = 0; j < n21; j++)
A[B[j][0]] = B[j][1];
// frequency calculate
int c[n1] ;
for(i = 0; i < n1; i++)
c[i] = 0;
for(i = 0; i < n1; i++)
c[A[i]]++;
int mx = INT_MAX;
int idx = -1, idx1 = -1;
for(i = 0; i < n1; i++){
if (mx < A[i]){
idx1 = idx;
mx = A[i];
idx = i;
}
int p;
if (A[idx]> A[idx1])
p = A[idx];
else
p = A[idx1];
ans[x++] = p; }
return ans; }
我们该如何解决呢?任何人都可以提出一些答案吗?
【问题讨论】:
-
我在这里没有看到问题...
-
您必须根据给定的注释进行适当的更改,并在每次迭代后打印最频。出现字符??我正在尝试使用优先队列解决它你的建议是什么??
-
您编写的需要帮助的代码在哪里?