找出一堆整數中兩個元素和為指定值的所有組合

2021-09-22 10:42:03 字數 1779 閱讀 2954

問題描述

5, 5,-7, 5, 9, -1, 5, 1, 9, 4, 6 這堆數中兩個數的和為10的組合有:5+5, 9+1, 4+6,如何快速的找出這樣的組合?

假定

陣列a存放元素,陣列大小為len_a

指定和為aim

思路一

先排序,low=0(最低位置),up=len_a(最高位置)

**:

#include #include 

using

namespace

std;

void printpairsums(int data, int size, int

sum);

int main(int argc, char*ar**)

;

int size = sizeof(data) / sizeof(data[0

]);

inti;

sort(data, data +size);

printpairsums(data, size,

8);

return

0;

} void printpairsums(int data, int size, int

sum)

else

if (s

else

} }

思路二位操作(詳細解釋看

思路:

#include #include 

using

namespace

std;

void setbit(char *entry, int

nbits)

void setbit_0(char *entry, int

nbits)

int checkbit(char *entry, int

nbits)

intmain()

;

int aim = 10

;

int size = sizeof(data) / sizeof(data[0

]);

int i, min=data[0], max=data[0

];

int num_aim = 0

;

if(aim % 2 == 0

)

}for(i=1; i)

int dis_e = (max-min) / 8 + 1

;

char

entry[dis_e];

for (i=0; i)

int dis = 0 -min;

for(i=0; i)

if(aim % 2==0

)

for(i=0; i)}}

問題擴充套件已知兩個公升序陣列,從兩個陣列中各取乙個數值,求使得兩個數之和為給定值的所有組合。

問題本質和一位陣列一樣,乙個從乙個陣列的開始前進,乙個從另外乙個陣列的最後後退。

分類: 

演算法&&資料結構

找出兩個List 中不同的元素

public class collectionutil 找出兩個集合中不同的元素 param collmax param collmin return public static collection getdifferent collection collmax,collection collmi...

找和為k的兩個元素

今天在做coursera上的練習題時,遇到了乙個找和為k的兩個元素的問題,按照常規的方法,將資料存入陣列中,一次為每個數字遍歷陣列,找到是否存在和為k的元素,但是這樣的話時間複雜度為o n 2 恰好前兩天剛看過快速排序的思想,發現,使用快速排序,可以優化降低時間複雜度。找和為k的兩個元素 描述在乙個...

排序陣列,找出兩個和等於指定數

題目 輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。解 如果只是最簡單的遍歷,時間複...