(C) 仅当满足条件时,才删除for循环下整数数组的元素

(C) 仅当满足条件时,才删除for循环下整数数组的元素,c,arrays,loops,elements,C,Arrays,Loops,Elements,和/或使用不满足循环条件的剩余元素创建新数组 所以我有两个数组,我比较每个元素,用相应的下标,这样我可以检查是否相等 for ( i = 0; i < n; i++) { if ( arrayOne[i] == arrayTwo[i] ) { arrayOne[i] = -1 /UPDATE#1 I assinged the values to -1 since I really don't care what happens tp the "taken" ones,

和/或使用不满足循环条件的剩余元素创建新数组

所以我有两个数组,我比较每个元素,用相应的下标,这样我可以检查是否相等

for ( i = 0; i < n; i++) {
   if ( arrayOne[i] == arrayTwo[i] ) {
       arrayOne[i] = -1 /UPDATE#1 I assinged the values to -1 since I really don't care what happens tp the "taken" ones, what I want is the statistics of how many became a couple, thus the couple++ counter
       couple++;  //frequency of same value for each respective subscript         
   }
}
输出:

 arrayTwo[] = {5,6,7,8};
 arrayOne[] = {5,5,8,5,4,4,4}; //comparing arrayOne to arrayTwo
 couple = 1; //(since only element[0] of the two arrays are the same --> 5 == 5
 atlast = 1; //no regards to position or subscript as long as present in arrayTwo
然后:

 arrayTwo[] = {5,6,7,8};
 arrayOne[] = {5,5,8,5,4,4,4}; //comparing arrayOne to arrayTwo
 couple = 1; //(since only element[0] of the two arrays are the same --> 5 == 5
 atlast = 1; //no regards to position or subscript as long as present in arrayTwo
我应该删除
arrayOne[0]
,它是5,所以我的
arrayOne
(或者我将创建新的数组)。 剩下的元素是5,8,5,4,4,4

然后,嘿,5已被删除(采取),所以我不需要5了。剩下的元素是8,4,4,4

到现在为止,我只有8,4,4,4。但是4个重复,我只需要一个4。所以我删除了重复的4s

最后,在删除了这些元素之后,我在
arrayOne
中只有8和4个元素。我将在
arrayTwo
中查找他们的合作伙伴。(相同的值,不考虑下标或位置)意思是,我不再关心位置,只要我在
arrayTwo
中有相同的值,这才是最重要的)

只有8在
阵列two
中有合作伙伴。我将其设置为
atlast++
,因此
atlast=1

我不知道该怎么做:

 arrayTwo[] = {5,6,7,8};
 arrayOne[] = {5,5,8,5,4,4,4}; //comparing arrayOne to arrayTwo
 couple = 1; //(since only element[0] of the two arrays are the same --> 5 == 5
 atlast = 1; //no regards to position or subscript as long as present in arrayTwo
  • 删除数组中的“take”元素(耦合)//无需,找到另一种方法
  • 删除arrayOne中与刚删除的“take”(耦合)元素具有相同值的其余元素/s//my arrayTwo包含唯一的、不重复的随机数,因此将-1赋给take元素可以更轻松地忽略arrayOne中剩余的重复项(这意味着虽然arrayTwo是唯一的,但arrayOne不是)
  • 问题已解决。

    对于最后一个计数器,我从所取的数字中减去它。(我把它定为绝对值) //意想不到的解决方案,比你们给我的见解:)

    Insight

    我唯一需要的输出是耦合频率和atlast。对于我必须做的事情和取得的成就,我受到了许多规则的轰炸。但毅力确实值得。呼

    最后一次运行样本

    arrayTwo={5,6,7,8,9}//唯一随机数,非重复
    arrayOne={

    要从数组中删除元素,必须将要删除的索引后面的所有元素向下移动一个,然后减小数组的长度

    备选方案包括:

  • 使用一个特殊的“空”值来指示此索引已被删除(循环必须跳过它,并且您可能必须对索引进行计算,但它是O(1)delete而不是O(n))
  • 改为使用链表

  • 另一种解决方法是创建“arrayOneBis”并从“arrayOne”复制值,跳过要删除的元素
    #include <stdio.h>
    
    int main(){
        int arrayTwo[] = {5,6,7,8};
        int arrayOne[] = {5,5,8,5,4,4,4};
        int size1 = 7, size2 = 4;
        //i will initialize them randomly, 0 - 9 only
        int counting[10] = {0};
        int i;
        for(i=0;i<size1;++i)
            ++counting[arrayOne[i]];//counting
    
        for(i=0;i<size2;++i)
            counting[arrayTwo[i]]=0;//delete
        size1 = 0;
        for(i=0;i<10;++i){
            if(counting[i]){
                arrayOne[size1++] = i;
            }
        }
        printf("result arrayOne = { ");
        for(i=0;i<size1;++i)
            printf("%d ", arrayOne[i]);//{ 4 }
        printf("}\n");
        return 0;
    }
    
    int main(){ int arrayTwo[]={5,6,7,8}; int arrayOne[]={5,5,8,5,4,4}; int size1=7,size2=4; //我将随机初始化它们,仅0-9 整数计数[10]={0}; int i;
    对于(i=0;ii在您的示例中,为什么要完全删除5(因为它是重复的),但当涉及到4时,除了其中一个之外,您要全部删除它们?您有数组中有效元素的数量吗?通过删除,您是否也要释放空间?@Filipgonçalves Gonca,因为5在arrayTwo中发现了一对“夫妇”(第一个循环关心情侣计数器检查相同的值,相同的位置。例如,arrayTwo[0]=5和arrayOne[0]=5,因此它们匹配。这就像命中注定的爱情。lol。然后剩余的5不再有爱情的机会,因为5已经被占据。4仍然存在,即使它没有命中注定的爱情(相同位置的确切值4=不可能),它将不得不等待,比如说,必然的爱(如果他们没有在完全相同的位置相遇,比如说位置[3],这并不重要,只要他们匹配)@cup我将随机初始化它们,仅0-9个,每个数组6个元素。我刚刚超过了我的数组,这里有一个是为了指出我的目标。通过删除,我不再关心其余元素的位置(我知道它们将在“take”之后在数组中的下标或位置发生变化)数组中的已删除。从技术上讲,在C语言中不能这样做,至少没有显式语言支持。你是说使用表示数组结尾的特殊指针/索引吗?是的,我的意思是减少用于跟踪数组长度的变量。如果数组通过任何函数形式参数,
    sizeof
    不再有用,因此保留一个长度变量无论如何都很方便。显然不会释放内存,但这就是我提到链表的原因。