常用演算法題目總結一(陣列篇)

2021-08-03 12:32:01 字數 3802 閱讀 4743

一、如何用遞迴實現陣列求和?

#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 ...