在排序陣列中查詢和為定值的兩個元素

2021-06-25 08:18:33 字數 1391 閱讀 1686

題目:已知乙個已經按公升序排好序的陣列,現在輸入乙個數值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。分析 如果我們不考慮時間複雜度,...