jar包在linux上持續執行及終止執行的命令
阿新 • • 發佈:2020-12-27
技術標籤:演算法資料結構javapythonleetcode
- 刪除資料庫中相同內容元素的方法是非常常見的問題,資料重複會佔用許多不必要的空間。
- 如集合
arr1[] ={11, 22, 33, 44, 55}; arr2[] ={23, 11, 64, 55, 98};
都具有相同的元素{11, 55}
,那麼如何將arr2
中的元素新增到arr1
呢? - 從
arr2
中的第一個元素arr2[0]=23
和arr1
中的arr[i++]
所有元素進行遍歷比較。如果有相同的元素就break
,這樣可以減少迴圈步驟;如果沒有相同的元素,則將這個元素加到arr1
中。 - 程式碼如下:
#include"stdio.h" //輸出 int print(int arr[], int arrayLength){ for(int i = 0; i < arrayLength; i++){ printf("%d ", arr[i]); } printf("\n"); } //並集 int unions(int *p1, int *p2){ int unions[10] = {0}, index = 5; for(int m=0; m<5; m++){ *(unions+m)=*(p1+m); } int arrFlag=5; for(int i=0;i<5;i++){ int flag=0; for(int j=0;j<10;j++){ if(*(unions+j) != *(p2+i) && *(unions+j)!=0){ ++flag; } } if(flag==arrFlag){ ++arrFlag; *(unions+index++) = *(p2+i); } } printf("集合的並集是:"); print(unions,10); } int main(){ int arr1[] ={11, 22, 33, 44, 55}; int arr2[] ={23, 11, 64, 55, 98}; int arrayLength = sizeof(arr1)/4; printf("原集合:"); print(arr1,arrayLength); print(arr2,arrayLength); unions(arr1,arr2); }
- 從上面論述中可以發現,陣列
arr2
中的所有元素要和陣列arr1
的所有元素進行比較,這樣時間複雜度為O(n*m),n為arr1
元素的個數,m為arr2
元素的個數。如果有100個數據,則要進行10000次比較,所以是十分浪費時間的。 - 改進方法:將陣列
arr1
中的所有元素進行排序,用arr2
中的元素在陣列arr1
中的所有元素進行二分查詢(時間複雜度:O(log2n)),這樣可以大大減少執行步驟。時間複雜度為:O(n log n + log2n)。 - 演算法來源:高三刷計基題有大量重複的題目,如何減少重複的題目,減少不必要的時間。