陣列問題分類之六

2021-09-02 15:05:10 字數 4111 閱讀 5589

不包含本位置值的累乘陣列

陣列的partition調整

最短通路值

陣列中未出現的最小正整數

陣列排序之後相鄰數的最大差值

給定乙個n×n的矩陣matrix,在這個矩陣中,只有0和1兩種值,返回最大正方形的邊長長度。

如:0 1 1 1 1

0 1 0 0 1

0 1 0 0 1

0 1 1 1 1

0 1 0 1 1

其中邊框全是1的最大正方形大小為4×4,返回4

逐個位置判斷複雜度可以達到o(n4),經過更改後的複雜度可以達到o(n3)

#include

#include

#include

using

namespace std;

void

setbordermap

(vectorint>>

&m, vectorint>>

&right, vectorint>>

&down)

for(

int i = row -

2; i >=

0; i--)}

for(

int i = col -

2; i >=

0; i--)}

for(

int i = row -

2; i >=

0; i--)}

}}bool

hassizeofborder

(int size, vectorint>> right, vectorint>> down)

}return

false;}

intgetmaxsize

(vectorint>> m)

return0;

}int

main()

int res =

getmaxsize

(in)

; cout << res << endl;

getchar()

;return0;

}

給定乙個整形陣列arr,返回不包含本位置值得雷乘陣列

如:arr=[2, 3, 1, 4],返回[12, 8, 24, 6],即除自己外,其他所有位置上的乘積。

要求時間複雜度o(n);額外空間複雜度為o(1);

兩種方法,一種是得到全部乘積後進行除法,不允許除法的情況下,可以參考第二種方法。

#include

#include

using

namespace std;

int*

multi1

(int

* arr,

int len)

int* res =

newint

[len]

;for

(int i =

0; i < len; i++

) res[i]=0

;if(cnt ==0)

if(cnt ==1)

}return res;

}int

*multi2

(int

* arr,

int len)

return res;

}void

print

(int

* arr,

int len)

intmain()

給定要給有序陣列,調整arr使得這個陣列的左半部分沒有重複元素且公升序,不用保證右半部份是否有序。

補充題目:給定乙個陣列arr,其中只可能含有0, 1, 2三個值,請實現arr的排序。

要求:時間複雜度o(n),額外空間複雜度為o(1);

#include

using

namespace std;

void

swap

(int

*&arr,

int index1,

int index2)

void

leftunique

(int

* arr,

int len)

}void

sort

(int

*&arr,

int len)

}int

main()

給定乙個整型矩陣matrix表示乙個網路,1表示有路,0表示無路,每個位置只要不越界,都有上下左右四個方向,求從左上角到右下角最短通路值。如matrix為:

1 0 1 1 1

1 0 1 0 1

1 1 1 0 1

0 0 0 0 1

通路由12個1構成,返回12.

#include

#include

#include

using

namespace std;

void

walkto

(int pre,

int tor,

int toc, vectorint>>

&m, vectorint>>

&mp, queue<

int>

&rq, queue<

int>

&cq)

intminpath

(vectorint>> m)

return res;

}int

main()

int res =

minpath

(in)

; cout << res << endl;

getchar()

;return0;

}

給定乙個無序整形陣列arr,找到陣列中未出現的最小正整數。

如:arr=[-1,2,3,4]。返回1;arr=[1,2,3,4],返回5;

#include

using

namespace std;

void

swap1

(int

*&arr,

int index1,

int index2)

intminnum

(int

* arr,

int len)

return l +1;

}int

main()

給定乙個整型陣列arr,返回排序後的相鄰兩數的最大差值。

arr=[9,3,1,10],排序之後為[1,3,9,10],相鄰兩個數之間最大插值為6,返回6即可。

如果arr長度為n,要求時間複雜度為o(n).

類似桶排序思想

#include

#include

using

namespace std;

intbucket

(long num,

long len,

long min,

long max)

intmaxgap

(int

* arr,

int len)

if(min == max)

return0;

bool

* hasnum =

newbool

[len +1]

;int

* maxs =

newint

[len +1]

;int

* mins =

newint

[len +1]

;for

(int i =

0; i <= len; i++

)int bid =0;

for(

int i =

0; i < len; i++

)int res =0;

int lastmax =0;

int i =0;

while

(i <= len)

}for

(; i <= len; i++)}

return res;

}int

main()

分類問題(六)誤差分析

誤差分析 如果上一章中的分類器是乙個真實的專案,則我們最好是要遵循機器學習專案步驟 探索資料 準備資料 嘗試多個模型 列出表現最好的幾個模型 使用gridsearchcv對超引數進行調優 盡可能實現自動化。現在,假設我們已經有了乙個效能還不錯的模型,接下來我們要找一些辦法去優化 提公升它。其中乙個辦...

陣列問題之七

自然數陣列的排序 奇數下標都是奇數或者偶數下標都是偶數 子陣列的最大累加和問題 在陣列中找到乙個區域性最小的位置 陣列中子陣列的最大累乘積 陣列小和定義如下 陣列s 1,3,5,2,4,6 在s 0 的左邊小於等於s 0 的數的和為0,在s 1 的左邊小於或等於s 1 的數的和為1,在s 2 的左邊...

陣列的分類

一 索引陣列 索引陣列 一般表示陣列元素在陣列中的位置。在php中陣列元素可以是任意型別。鍵 值,在陣列中,鍵不相同的,值可以相同。array push 將乙個或多個單元壓入陣列的末尾 入棧 range 建立乙個包含指定範圍單元的陣列。array range start,limit start 開始...