【发布时间】:2014-12-17 08:15:27
【问题描述】:
我正在尝试找到一种有效的方法来查找当前元素右侧的所有元素的计数,其值小于 C 中数组中的当前元素。
例如:
我的数组是R = [2, 4 ,3 ,1]
那么对于2,2右边的元素是(4,3,1),其中小于2是1,所以计数是1。 那么对于4,4右边的元素是(3,1),其中小于4的是3和1,所以计数是2。 那么对于3,3右边的元素为(1),其中小于3为1,所以计数为1。 那么对于 1,1 的右边没有任何东西,所以没有什么少所以 count 是 0。
所以输出数组(包含所有计数)是 [1,2,1]。
如何在 C 中高效地做到这一点?
我写了如下代码sn-p,好像不正确:
for( i = 0 ; i < size; i++ ) {
index = find_index(R,size,R[i]);
for( j = index+1 ; j < size; j++ ) {
values_to_right[j] = R[j];
}
print_array(values_to_right, size);
printf("\n****************\n");
}
我的 find_index() 和 print_array() 函数如下:
int find_index(int a[], int num_elements, int value)
{
int i;
for (i=0; i<num_elements; i++)
{
if (a[i] == value)
{
return(i); /* it was found */
}
}
return(-1); /* if it was not found */
}
void print_array(int a[], int num_elements)
{
int i;
for(i=0; i<num_elements; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
任何帮助将不胜感激。
【问题讨论】:
-
在调试器中逐行逐行检查代码,看看代码到底做了什么。
-
但作为提示,
values_to_right[j] = R[j]看起来不太正确。