《演算法導論》第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每次走一步,所以,我們知道如果有環,那...