題目:
陣列a[n],1至n-1這n-1個數存放在a[n]中,其中某個數重複一次。寫乙個函式,找出被重複的數字。
方法一:異或法。
陣列a[n]中的n個數異或結果與1至n-1異或的結果再做異或,得到的值即為所求。
**:
#include方法二:數學法。#include
#include
#include
void xor_finddup(int * a,int n)
for (i=1;i
printf("%d\n",result);
}
int main(int argc, char* argv)
;
xor_finddup(a,5);
return 0;
}
對陣列的所有項求和,減去1至n-1的和,即為所求數。
#include對於求和,可以直接根據公式定義乙個巨集。#define sum(x) (x*(x+1)/2)#include
#include
#include
void xor_finddup(int * a,int n)
tmp2+=a[n-1];
int result=tmp2-tmp1;
printf("%d\n",result);
}
int main(int argc, char* argv)
;
xor_finddup(a,5);
return 0;
}
#include方法三:標誌陣列法#include
#include
#include
#define sum(x) (x*(x+1)/2)
void xor_finddup(int * a,int n)
int result=tmp2-tmp1;
printf("%d\n",result);
}
int main(int argc, char* argv)
;
xor_finddup(a,5);
return 0;
}
申請乙個長度為n-1且均為'0'組成的字串。然後從頭遍歷a[n]陣列,取每個陣列元素a[i]的值,將其對應的字串中的相應位置置1,如果已經置過1的話,那麼該數就是重複的數。就是用位圖來實現的。 如果考慮空間複雜度的話,其空間o(n)
#include方法四:固定偏移量法#include
#include
#include
#define sum(x) (x*(x+1)/2)
void xor_finddup(int * arr,int num)
for( i=0; i
}
}
int main(int argc, char* argv)
;
xor_finddup(a,5);
return 0;
}
a[n],裡面是1至n-1。原陣列a[i]最大是n-1,若a[i]=k在某處出現後,將a[k]加一次n,做標記,當某處a[i]=k再次成立時,檢視a[k]即可知道k已經出現過。該方法不用另外開闢o(n)的記憶體空間,但是在查重之後要將陣列進行恢復。
#include方法五:符號標誌法#include
#include
#include
void xor_finddup(int * arr,int num)
else
} printf("無重複");
return ;
}
void clear(int *data,int num)//清理資料
} int main(int argc, char* argv)
;
xor_finddup(a,5);
clear(a,5);
return 0;
}
上個方法出現後是加n,也可以出現後加個負號,就是符號標誌法。
#include以上的方法對陣列元素的值的範圍是有限制的,如果陣列元素的值不是在1至n-1範圍時,可以先求出陣列元素的最大值。#include
#include
#include
#include
void xor_finddup(int * arr,int num)
else
}
printf("無重複");
return ;
}
void clear(int *data,int num)//清理資料
}
int main(int argc, char* argv)
;
xor_finddup(a,5);
clear(a,5);
return 0;
}
#include#include
#include
#include
#include
int do_dup_mal(int arr, int n, int *pre, int *back)
char *arrayflag = new
char[max+1] ;
if (null == arrayflag)
return -1;
memset(arrayflag, 0, max+1 ); // '\0' == 0
for(i=0; i
} delete arrayflag;
if (i < n)
} } return
false;
} void main(int argc, char *argv)
Python 如何找出陣列中唯一重複的元素
1.hash法 字典法 空間換時間 def finddup array if array none return 1 lens len array hashtable dict i 0 while i時間和空間複雜度都是o n 2.累加求和法 def finddup array if array n...
找出陣列中任一重複的數 C
乙個長度為n的陣列,陣列中的值屬於0 n 1 範圍內。現已知該陣列中一定有重複的數字,請找出任意乙個重複的數字。如果該陣列中沒有重複的數字,那麼下標和下標對應的值就相等了,即是array i i。利用好這點,尋求解題方法。include include using namespace std int...
求陣列中唯一重複的數字
求陣列中唯一重複的數字 陣列a n 1至n 1存在a中,有乙個是重複的,找出這個數字。第一種方法 include int main void int i,sum 0,x for i 0 i 11 i x sum 1 10 10 2 陣列總和 減去1到10得和多出來的就是重複的 printf d n ...