![](/img/trans.png)
[英]Why this correct code in Golang is considered wrong at HackerRank?
[英]Golang code too slow for Hackerrank
我一直在嘗試解決這一Hackerrank挑戰: 鏈接
這是您要做的:
您有一個大矩陣:
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 0 1 1
和一個小的矩陣:
1 1 1
1 1 1
1 1 0
您必須找出大矩陣中是否存在小矩陣。
最多有5個測試用例,每個矩陣的最大大小為1000x1000,我需要在4秒內解決。
對於可能的最大輸入,我的代碼超時,我認為也許我如何掃描矩陣太慢。
這是我的代碼:
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
var t, rL, cL, rS, cS, temp int
var s string
var sl []string
var mxL, mxS [][]int
var found bool
fmt.Scanf("%d", &t)
for ; t > 0; t-- {
// Start scanning input
// Scanning large matrix
fmt.Scanf("%d%d", &rL, &cL)
mxL = make([][]int, rL)
for i := range mxL {
mxL[i] = make([]int, cL)
}
for i := 0; i < rL; i++ {
fmt.Scanf("%s", &s)
sl = strings.Split(s, "")
for j, v := range sl {
temp, _ = strconv.Atoi(v)
mxL[i][j] = temp
}
}
// Scanning small matrix
fmt.Scanf("%d%d", &rS, &cS)
mxS = make([][]int, rS)
for i := range mxS {
mxS[i] = make([]int, cS)
}
for i := 0; i < rS; i++ {
fmt.Scanf("%s", &s)
sl = strings.Split(s, "")
for j, v := range sl {
temp, _ = strconv.Atoi(v)
mxS[i][j] = temp
}
}
// Stop scanning input
// Start searching for small matrix in large matrix
found = true
for iL := 0; iL <= rL-rS; iL++ {
for jL := 0; jL <= cL-cS; jL++ {
found = true
if mxL[iL][jL] == mxS[0][0] {
for iS := 0; iS < rS; iS++ {
for jS := 1; jS < cS; jS++ {
if mxS[iS][jS] != mxL[iS+iL][jS+jL] {
found = false
break
}
}
if !found {
break
}
}
if found {
break
}
} else {
found = false
}
}
if found {
fmt.Println("YES")
break
}
}
if !found {
fmt.Println("NO")
}
// Stop searching for small matrix in large matrix
}
}
我正在使用一片int切片來存儲輸入。
mxL
是大矩陣, mxS
是小矩陣。
rL
和cL
代表大型矩陣的行和列。
rS
和cS
代表小矩陣的行和列。
好吧,我要向您指出一個想法,然后您可以嘗試實現它。 因此,創建一個與大型陣列一樣大的新2d陣列。 稱之為sumArray。 現在,讓此sumArray中的每個單元格代表總和,其中當前單元格是最左下角的單元格。 現在,您要做的是僅檢查與小數組具有相同總和的單元格,而不是檢查數組中的每個元素。
因此,如果這些是您的投入
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 0 1 1
1 1 1
1 1 1
1 1 0
首先將你的小數組求和-> 8
現在讓我向您展示您的sum數組如何
-1 -1 -1 -1 -1 -1 -1 means that we can't sum at this point because
-1 -1 -1 -1 -1 -1 the dimensions are just smaller than your small array
-1 -1 9 9 9 9 each other cell represent the sum of your original
9 9 9 9 9 9 matrix values.
9 9 9 8 9 9
現在,如果僅通過該陣列進行掃描,則可以看到將搜索空間從每個可能的位置減少到僅等於和的位置。 這不能保證陣列處於此位置,您仍然必須添加驗證步驟,但是會減少搜索空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.