1. 程式人生 > 其它 >jar包在linux上持續執行及終止執行的命令

jar包在linux上持續執行及終止執行的命令

技術標籤:演算法資料結構javapythonleetcode

  • 刪除資料庫中相同內容元素的方法是非常常見的問題,資料重複會佔用許多不必要的空間。
  • 如集合arr1[] ={11, 22, 33, 44, 55}; arr2[] ={23, 11, 64, 55, 98};都具有相同的元素{11, 55},那麼如何將arr2中的元素新增到arr1呢?
  • arr2中的第一個元素arr2[0]=23arr1中的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)。
  • 演算法來源:高三刷計基題有大量重複的題目,如何減少重複的題目,減少不必要的時間。