-2
我正在爲Hackerrank編寫一個編程問題。 https://www.hackerrank.com/challenges/30-2d-arrays。我已經解決了這個問題,但是像所有優秀的培訓開發人員一樣,我正在尋找創建最快代碼執行的2d數據結構的最佳實踐建議。矢量vs二維數組vs vs int *裏面的數組。
問題很簡單,並要求在二維數組中定義一個形狀並計算該形狀的所有出現的最高值。
因此,首先,我們不是使用模板中提供的矢量,而是使用二維數組。然而,我有一些指針的訓練,所以我做了一個結構指針這樣的二維數組:
- 是我的解決方案比只使用普通的舊的二維數組更好嗎?
- 如果是這樣,我甚至不應該爲了一個大項目而付出努力嗎?
- 如果不是,我應該什麼時候(永遠)選擇這種事情?
在此先感謝
#include <iostream>
using namespace std;
struct row {
signed int * usePointers;
};
int main() {
int highest = -324;
int next;
row* chart;
chart = new row[6]; //allocate all rows first
for (int arr_i = 0; arr_i < 6; arr_i++) {
chart[arr_i].usePointers = new int[6]; //allocate each column here
for (int arr_j = 0; arr_j < 6; arr_j++) {
chart[arr_i].usePointers[arr_j] = 0; //fill each element here
cin >> chart[arr_i].usePointers[arr_j];
}
}
//create the hourglass (n-3)*(n-3) times
for (int arr_i = 0; arr_i <=3; arr_i++) {
for (int arr_j = 0; arr_j <=3; arr_j++) {
next = 0;
//top
next += chart[arr_i].usePointers[arr_j] +
chart[arr_i].usePointers[arr_j+1] +
chart[arr_i].usePointers[arr_j+2];
//mid
next += chart[arr_i+1].usePointers[arr_j + 1];
//bottom
next += chart[arr_i+2].usePointers[arr_j] +
chart[arr_i+2].usePointers[arr_j + 1] +
chart[arr_i+2].usePointers[arr_j + 2];
if (next > highest)
highest = next;
//cout << chart[arr_i].usePointers[arr_j];
}
}
cout << highest;
free(chart);
return 0;
}
如果您的解決方案有效,您最好在[codereview.se]上提問這個問題。 – ForceBru
不要垃圾標籤!這顯然不是C.那麼「新的二維數組」會是什麼? – Olaf
我使用了一個c風格的結構,並製作了一個雙指針。我認爲代碼領域對C開發人員來說很熟悉。 此外,你也是唯一一個在線程中說「新的二維數組」,不要濫用引號,因爲我搜索它,所以我可以回答你的問題,什麼都沒發現。 – Crawsome