判斷集合S中是否存在兩個其和等於x的元素

2021-05-12 20:07:08 字數 1472 閱讀 6031

《演算法導論》第23頁練習2.3-7:

請給出乙個執行時間為nlogn的演算法,使之能在給定乙個由n個整數構成的集合s和另乙個整數時,判斷出s中是否存在兩個其和等於x的元素。

(1) 產生隨機數

(2) 合併排序,複雜度為nlogn

(3) 查詢符合要求的元素,複雜度為nlogn

總的複雜度為nlogn。

#include

#include

#define  max_num  100

void set_random_array(int *array,int max);

void print_random(const int *array,int max);

void my_sort(int *array,int beg,int end);

void combine(int *array,int beg,int mid,int end);

void find_element(int *array,int max,int num);

int binary_search(const int *array,int beg,int end,int value,int *ret);

int main()

void set_random_array(int *array,int max)

return;

}void print_random(const int *array,int max)

printf("/n");

return;

}void my_sort(int *array,int beg,int end)

}else if(beg < end)

return;

}void combine(int *array,int beg,int mid,int end)

left[n] = 1000;

pmid = mid+1;

right = (int *)malloc((end-pmid+2)*sizeof(int)); 

for(n = 0;pmid <= end;pmid++,n++)

right[n] = 1000;

for(pbeg = beg,n = 0,m = 0;pbeg <= end;pbeg++)

else

}free(left);

free(right);

return;

}void find_element(int *array,int max,int num)

}return;

}int binary_search(const int *array,int beg,int end,int value,int *ret)

else if(array[mid] > value)

end = mid - 1;

else

beg = mid + 1;

}return(0);

}  

js判斷兩個區間是否存在交集

思路 兩個區間,兩者的最小值中的最大值 兩者最大值的最小值時 就存在交集 let arr1 1,4 let arr2 2,5 let arr3 5,2 let arr4 4,5 let arr5 9,5 let arr6 1,4 let arr7 5,6 let arr8 5,5 判斷兩個區間是否相...

C 判斷兩個集合中的元素是否相等

今天在寫介面時,需要根據當前傳入的集合資料,和上次傳入的集合資料是否相同,做出不同的邏輯處理.如果直接根據等號進行比較,是比較的記憶體位址,因為兩次傳入,有其中乙個是new建立的,所以肯定不相等。可以使用sequenceequal這個方法,非常實用 demo list long nums newli...

判斷兩個單向鍊錶是否存在環

今天mayuyu來帶領你們討論如下三個問題 1 如何判斷乙個單鏈表是否存在環 2 如果存在環,如何找到環的入口點?3 兩個鍊錶中有環時,如何判斷相交?問題一 我們設定兩個指標,分別是fast和slow,初始都指向這個單向鍊錶的表頭,fast每次走兩步,而slow每次走一步,所以,我們知道如果有環,那...