一、如何用遞迴實現陣列求和?
#include
"stdafx.h"
#include
#include
using namespace std;
template
t getsum
(t* a,
int n)
return
getsum
(a,n-1)
+*(a+n-1)
;}int_tmain
(int argc, _tchar* argv)
; cout
(data,5)
;system
("pause");
return0;
}
二、如何用乙個for迴圈列印出乙個二維陣列?
#include
"stdafx.h"
#include
using namespace std;
void
printarray()
;for
(int i=
0;iint_tmain
(int argc, _tchar* argv)
三、如何用遞迴演算法判斷乙個陣列是否是遞增?
#include
"stdafx.h"
#include
using namespace std;
template
bool isincreasearray
(t* p,
int n)if(
*(p+n-1)
>
*(p+n-2)
)else
}int
_tmain
(int argc, _tchar* argv)
; cout
(data,5)
;system
("pause");
return0;
}
四、二分查詢演算法的實現
二分查詢法也稱折半查詢法,它的思想是每次都與序列中的中間元素進行比較,前提是陣列是有序的。
#include
"stdafx.h"
#include
#include
using namespace std;
//非遞迴實現
template
intbinarysearch
(t* a,
const
int len,
const t data)
int low=0;
int top=len-1;
while
(low<=top)
else
if(data)else
}return-1
;}//遞迴實現
template
intbinarysearchrecursion
(t* a,
const t data,
int low,
int top)
int pos=low+
(top-low)/2
;if(data==a[pos]
)else
if(data)else
}int
_tmain
(int argc, _tchar* argv)
; cout<<
binarysearch
(data,5,
4); cout<<
binarysearchrecursion
(data,4,
0,4)
;system
("pause");
return0;
}
五、如何在排序陣列中,找出給定數字出現的次數?
下面這段**是在二分查詢法的基礎上進行改進,找出最左側的位置和最右測的位置,做差得出次數。
#include
"stdafx.h"
#include
using namespace std;
template
intbinarysearchcount
(t* a,
const
int len,
const t data, bool isleft)
else
if(data > a[pos]
)else
else}}
return last;
}int
main()
;int low = binarysearchcount<
int>
(data,
sizeof
(data)
/sizeof
(data[0]
),2, true)
;int top = binarysearchcount<
int>
(data,
sizeof
(data)
/sizeof
(data[0]
),2, false)
; cout <<
(top - low +1)
;system
("pause");
return0;
}
六、如何計算兩個有序整型陣列(沒有重複元素)的交集?
例如 a=;b=; 交集為。
二路歸併遍歷兩個陣列
#include
"stdafx.h"
#include
#include
#include
#include
using namespace std;
intmixed
(int a,
int na,
int b,
int nb,
int m)
else
if(a[i]
)else
}return k;
}int
_tmain
(int argc, _tchar* argv)
;int b=
;int buff[5]
;int len=
mixed
(a,5
,b,5
,buff)
; cout<<
"mix data:"
;for
(int i=
0;i++i)
return0;
}
七、如何找出陣列中重複次數最多的數?
利用map對映表,first記錄數值,second記錄數值出現的次數。
#include
"stdafx.h"
#include
#include
#include
#include
using namespace std;
bool findmaxfreq
(int a,
int n,
int&val)
return true;
}int
_tmain
(int argc, _tchar* argv)
;int v=0;
if(findmaxfreq
(a,8
,v))
cout
}
常用演算法題目總結三(鍊錶篇)
只遍歷一次鍊錶時如何實現呢?示例 templatestruct node 鍊錶節點 template void printlist node head 列印鍊錶 cout endl templatenode constructlist int n 構造鍊錶 return head templaten...
排序演算法總結篇(一)
前言 在學習過程中,演算法是我們繞不過去的檻,可能我們沒有特體經過系統的學習,但是,實際上平時的 中已經體現了很多的演算法思想,以中興演算法大賽2017年中興演算法大賽 迪傑特斯拉派為列,裡面自己其實用到了很多演算法,只是自己並沒有將它與理論結合起來看。1.概述 首先,我們來看一張經典的圖,這張圖很...
演算法刷題及總結 陣列篇
演算法總結 leetcode題目35 搜尋插入位置 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 解法一 暴力法 時間複雜度 o n ...