【问题标题】:Finding count of all elemets to the right of current element whose value is less than current element in an array in C查找当前元素右侧的所有元素的计数,其值小于C中数组中的当前元素
【发布时间】: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] 看起来不太正确。

标签: c arrays


【解决方案1】:

检查下面的代码:

#include <stdio.h>

int main(void) {
    int a[4] = {2,4,3,1};
    int b[4];
    int i,sum,k=0,j;
    for(i=0;i<4;i++)
    {
        sum =0;
        for(j=i+1;j<4;j++)
        {
            if(a[j] < a[i])
            sum ++;
        }
        b[k++] = sum;
    }
    for(i=0;i<k;i++)
    printf("%d ",b[i]);
    return 0;
}

【讨论】:

  • 你拯救了我的一天。我只希望 C 能像 Python 一样简单,但事实并非如此。
  • @Technopolice 好吧.. Python 是用 C 编写的,所以让它沉下去一点:P
【解决方案2】:
int i = 0; 
// Used as loop index

int currentValue = myArray[currentIndex]; 
// Holds value at current element

int count = 0; 
// Will hold How many elements have smaller values (your question)

for(i = 0; i < currentIndex; i++){

   if(myArray[i] < currentValue){
       count++;
   }
}

将告诉您有多少数组元素的值小于您的参考元素。如果你想要一个哪些元素(数组索引)满足条件的列表,它会变得更复杂......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 2014-06-02
    • 2015-03-11
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多