劍指offer面試題57 和S的數字

2021-08-30 11:07:41 字數 1932 閱讀 1409

非科班的女渣碩士,用部落格記錄一下自己學的東西,有些錯誤還望大家指點,謝謝!

題目

輸入乙個陣列和乙個數字s,在陣列中查詢兩個數,使得他們和正好為s,如果有多對數字和等於是,輸出任意一對即可

int *f=new int [10], delete f

`int num=sizeof(data) /sizeof(data[0]);`
#include

using namespace std;

//o(n*n) 的方法

int*

findnumberswithsum

(int data,

int num,

int sum,

int find)

find=

newint[2

];bool find_flag=0;

for(

int i=

0;i(find_flag)}if

(find_flag)

}int

main()

;int num=

sizeof

(data)

/sizeof

(data[0]

);int*find=null;

// 先進行乙個初始化的過程

int sum=3;

find=

findnumberswithsum

(data,num,sum,find)

; cout<<

*find

// 應該在外面進行乙個delete // 當你想返回陣列的時候為了不跨函式進行new 和delete 最好直接在函式裡面進行傳引數

}// 這個是最暴力的方法,這樣的話複雜度為n*n

上面方法的複雜程度太高了,還有一種方法就是先對陣列進行排序,然後使用兩個指標進行判斷

#include

using namespace std;

//先排序的方法

int*

findnumberswithsum

(int data,

int*phead,

int*pend,

int sum,

int result,

int num)

while

(pheadelseif(

*phead+

*pendelse

pend--;}

}int

sort

(int data,

int num)}}

}int

main()

;int num=

sizeof

(data)

/sizeof

(data[0]

);int*result=null;

// 先進行乙個初始化的過程

int*phead,

*pend;

phead=data;

pend=phead;

int j=0;

while

(jpend--

;// 這一行要注意加上

cout<<

*pend

sort

(data,num)

;//排序

j=0;

// while(j//

result=

findnumberswithsum

(data,phead,pend,sum,result,num)

; cout<

]result;

return0;

}

劍指offer 面試題 57 和為 S 的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。對應每個測試案例,輸出兩個數,小的先輸出。時間限制 1秒 空間限制 32768k 熱度指數 62731 思路 要找兩個數的和為s,並不難,但是如果存在多個符合這樣要求的數,...

劍指offer 面試題57 和為s的數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。解決 public arraylistfindnumberswithsum int array,int sum else if array left array right...

劍指Offer 面試題57 和為 s 的數字

題目 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。題目 輸入乙個正數s,列印出所有和為s的連續正數序列 至少含有兩個數 例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以結果列印出3個連續序列1 5 4 ...