funcsortColors(nums []int) { var red, white, blue int for i := 0; i < len(nums); i++ { switch nums[i] { case0: red++ case1: white++ case2: blue++ } }
for i := 0; i < red; i++ { nums[i] = 0 } for i := red; i < red+white; i++ { nums[i] = 1 } for i := red + white; i < red+white+blue; i++ { nums[i] = 2 } return }
funcexist(board [][]byte, word string)bool { dir := [][]int{ {1, 0}, {-1, 0}, {0, -1}, {0, 1}, }
m, n := len(board), len(board[0]) vis := make([][]bool, m) for i := 0; i < m; i++ { vis[i] = make([]bool, n) }
startX, startY := []int{}, []int{}
for i := 0; i < m; i++ { for j := 0; j < n; j++ { if board[i][j] == word[0] { startX = append(startX, i) startY = append(startY, j) } } }
var dfs func(count int, x int, y int)bool dfs = func(count int, x int, y int)bool { if count == len(word) { returntrue }
vis[x][y] = true
for i := 0; i < 4; i++ { nx := x + dir[i][0] ny := y + dir[i][1]
if nx >= 0 && ny >= 0 && nx < m && ny < n && board[nx][ny] == word[count] && !vis[nx][ny] { vis[nx][ny] = true if dfs(count+1, nx, ny) == true { returntrue } vis[nx][ny] = false }
} returnfalse }
for i := 0; i < len(startX); i++ { vis = make([][]bool, m) for i := 0; i < m; i++ { vis[i] = make([]bool, n) } if dfs(1, startX[i], startY[i]) == true { returntrue } }
funclargestRectangleArea(heights []int)int { ans := 0
for i := 0; i < len(heights); i++ { left, right := i, i for left-1 >= 0 && heights[left-1] >= heights[i] { left-- } for right+1 < len(heights) && heights[right+1] >= heights[i] { right++ } area := (right - left + 1) * heights[i] if area > ans { ans = area } } return ans }
funclargestRectangleArea(heights []int)int { heights = append(heights, 0) n := len(heights) stack := []int{} ans := 0
for i := 0; i < n; i++ { forlen(stack) > 0 && heights[i] < heights[stack[len(stack)-1]] { curr := stack[len(stack)-1] stack = stack[:len(stack)-1] left := -1 iflen(stack) > 0 { left = stack[len(stack)-1] } area := (i - left - 1) * heights[curr] if area > ans { ans = area } } stack = append(stack, i) }
funcmaximalRectangle(matrix [][]byte)int { m,n:=len(matrix),len(matrix[0]) if m==0{ return0 }
heights:=make([]int,n) ans:=0
for i:=0;i<m;i++{ for j:=0;j<n;j++{ if matrix[i][j]=='1'{ heights[j]+=1 }else{ heights[j]=0 } } ans=max(ans,largestRectangleArea(heights)) } return ans }
funcmax(a,b int)int{ if a>b{ return a } return b }
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */
funcinorderTraversal(root *TreeNode) []int { ans:=[]int{} if root==nil{ return ans } if root.Left!=nil{ ans=inorderTraversal(root.Left) } ans=append(ans,root.Val) if root.Right!=nil{ ans=append(ans,inorderTraversal(root.Right)...) } return ans }