var s = [][]int{{1,2,3}, {4,5,6}} var s1 = [2][3]int{{1,2,3}, {4,5,6}} var s2 = [3][3]int{{1,2,3}, {4,5,6}} println(len(s)) // 2 println(len(s1)) // 2 println(len(s2)) // 3
Go中如何定义动态二维数组:
1 2 3 4 5 6 7 8 9 10
n, m := 2, 3 arr := make([][]int, n) for i := 0; i < len(arr); i++ { arr[i] = make([]int, m) } for i := 0; i < len(arr); i++ { for j := 0; j < len(arr[i]); j++ { println(arr[i][j]) } }
新学到可以使用append给数组添加元素
1 2 3 4 5 6 7 8
刚学到Go中可以使用append给数组添加元素 var a []int a = append(a, 1) var arr [][]int row1 := []int{1,2,3} row2 := []int{4,5,6} arr = append(arr, row1) arr = append(arr, row2)
/** * Manacher */ funclongestPalindrome(s string)string { start, end := 0, -1 t := "#" for i := 0; i < len(s); i++ { t += string(s[i]) + "#" } t += "#" s = t println(s) // 存储各个位置的最大臂长 arm_len := []int{} // right表示搜索到的最右边界 right, j := -1, -1 for i := 0; i < len(s); i++ { // 对于每一个i点 var cur_arm_len int if right >= i { // i点在right点的左侧 // i_sym为i相对于j的对称点 i_sym := j*2-i // i点的最短臂长 min_arm_len := min(arm_len[i_sym], right-i) // 从最短臂长向外搜索 cur_arm_len = expand(s, i-min_arm_len, i+min_arm_len) } else { // i点在right点右侧,一无所知 cur_arm_len = expand(s, i, i) } // 记录i点最大臂长 arm_len = append(arm_len, cur_arm_len) if i + cur_arm_len > right { // 更新中心j的位置 j = i // 更新right的位置 right = i + cur_arm_len } if cur_arm_len*2+1 > end - start { // 最大臂长更新 start = i - cur_arm_len end = i + cur_arm_len } } ans := "" for i := start; i <= end; i++ { if s[i] != '#' { ans += string(s[i]) } } return ans }
funcexpand(s string, left, right int)int { for ;left>=0&&right<len(s)&&s[left]==s[right]; left, right = left-1, right + 1{} // 要求的是臂长,所以要除2 return (right - left -2) / 2 }
funcmin(x, y int)int { if x < y { return x } return y }