題目:已知乙個已經按公升序排好序的陣列,現在輸入乙個數值sum,在陣列中查詢兩個數,使得這兩個數的和正好是輸入的sum,列印出這兩個數,如果存在多對這樣的數,依次列印出來。
如:array = ,輸入sum=28,那麼列印出(8,20) (10,18)
演算法思想1:最傻瓜的演算法,先在陣列中固定乙個值,然後依次遍歷陣列中其餘的值,如果有兩個數的和恰好等於sum,那麼輸出這兩個值(乙個是固定的值,乙個是遍歷陣列中滿足要求的值),演算法複雜度為o(n²)
typedef struct pair
value_t;
vectorfindelembysumsol1(int array, int size, int sum)
}}
return container;}
演算法思想2:遍歷陣列的每個值,針對每個值,temp=sum-當前值,然後在陣列中利用二分查詢法查詢temp是否存在於剩餘的陣列元素中,如果存在,輸出當前這和temp,演算法複雜度為o(nlogn)
bool binarysearch(int array, int first, int last, int key)
else if(key > array[middle])
else
}}return isfound;
vectorfindelembysumsol2(int array, int size, int sum)
}}return container;
演算法思想3:首先找到陣列中的第乙個元素n和最後乙個元素m,然後計算他們的和n+m,如果(n+m>輸入值sum),那麼把較大的數字index向前移動,如果(n+m
vectorfindelembysumsol3(int array, int size, int sum)
else if(temp_sum > sum)
else
}}return container;
在排序陣列中查詢和為給定值的兩個數字
14 題目 輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。思路 由於陣列為公升序,因...
100題 在排序陣列中查詢和為給定值的兩個數
在排序陣列中查詢和為給定值的兩個數 include using namespace std bool findnum int data,unsigned int length,int sum,int n1,int n2 int ahead length 1 int behind 0 while ah...
14 在排序陣列中查詢和為給定值的兩個數字
題目 輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。分析 如果我們不考慮時間複雜度,...