非科班的女渣碩士,用部落格記錄一下自己學的東西,有些錯誤還望大家指點,謝謝!
題目
輸入乙個陣列和乙個數字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/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 ...