輸入包含n個整數是陣列a和整數x,求出滿足a[i] + a[j] = x的i和j,如果沒有這樣的元素和,則返回-1,否則返回1
//暴力法
思路:設定兩個for迴圈,第乙個設定基準數,然後利用已知數x減去基準數之後,
再使用乙個for迴圈來進行匹配減去得到的數,如果存在該數,則返回1.如果不存在,
則繼續找下乙個基準數,直到可找的基準數沒有,如果最後還是沒有,則返回-1;
時間複雜度:o(n*2)
int
funtion1
(int a,
int n,
int x)
//二分法
思路:首先對整個陣列進行排序,這時採用二分形式進行查詢,是否存在a[i]+a[j]=x
如果a[i]+a[j]>x; 則a[j]較大,這時j–
如果a[i]+a[j]int
funtion2
(int a,
int n,
int x)
else
if(a[i]
+a[j]
>x)
else
}return-1
;}//hash法
思路:將陣列中的資料存在hash表中,然後查詢x-a[i]是否存在hash表中
時間複雜度o(n)
int
funtion3
(int a,
int n,
int x)
for(
int i=
0;i(hash[x-a[i]]==
1)return1;
return-1
;}
執行結果:
int
main()
;int x=12;
printf
("%d\n"
,funtion1
(a,10,12
));if
(funtion1
(a,10,12
)==1)
else}1
存在數值對
----
----
----
----
----
----
----
----
process exited after 2.753 seconds with return value 0
請按任意鍵繼續.
..
求包含n個整數的陣列a的第i小的數。
冒泡法:
思路:使用氣泡排序,小的冒出水面,當進行到第i個數時,返回該數
最大時間複雜度 o(n)
最小時間複雜度 o(1)
int
funtion2
(int a,
int n,
int x)
return a[n-x-1]
;}
//暴力法
思路;
先從小到大排序,在尋找第i位置的數
時間複雜度: o(n)
int
funtion1
(int a,
int n,
int x)
執行結果:
int
main()
;int x =3;
printf
("%d"
,funtion2
(a,10,4
));}
5------
----
----
----
----
----
----
--process exited after 2.123 seconds with return value 0
請按任意鍵繼續.
..
演算法設計與分析筆記(一)
遞迴與分治策略 遞迴的概念,典型應用 hanoi問題,程式如下 include void hanoi int n,char a,char b,char c void main 分治的基本思想 將乙個規模為n的問題分解成k個規模較小的子問題,然後遞迴解決這些問題。二分搜尋技術 include defi...
演算法分析與設計學習筆記1
下面哪乙個不是演算法的特性?同乙個數學模型使用不同的資料結構會有不同的演算法,有效性有很大差別 計算此偽 表示的演算法中加法的執行次數 答案 2t 1 1 解析 此類問題適合初學者進行練習,初學者接觸此類問題最好找從頭到尾梳理一遍,將題中所給資料帶入所給偽 中進行計算來梳理思路。運算過程 n最開始為...
演算法分析與設計學習筆記 5
貪心演算法 在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是貪心演算法。從貪心演算法的定義可以看出,貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解,而由問題自身的特性...