LeetCode热题100道-Day03
func inorderTraversal(root *TreeNode) []int {
res := make([]int, 0)
tra(root, &res)
return res
}
func tra(root *TreeNode, res *[]int) {
if root==nil {
return
}
tra(root.Left, res)
*res = append(*res, root.Val)
tra(root.Right, res)
}
- 两个指针,先让其中一个指针先走n步,然后两个指针同时前进,当前面的指针走到尽头,则后面的指针也达到预期位置,然后即可删除需要删除的节点
func removeNthFromEnd(head *ListNode, n int) *ListNode {
tempNode := &ListNode{}
tempNode.Next = head
p := tempNode
for i:=0; i<n; i++ {
head = head.Next
}
for head!=nil {
p = p.Next
head = head.Next
}
p.Next = p.Next.Next
return tempNode.Next
}
- 动态规划。定义dp[i][j] 为 走到点(i, j)总共的路径
func uniquePaths(m int, n int) int {
dp := make([][]int, m)
for i := range dp {
dp[i] = make([]int, n)
}
dp[0][0] = 1
for i:=1; i<m; i++ {
dp[i][0] = 1
}
for i:=1; i<n; i++ {
dp[0][i] = 1
}
for i:=1; i<m; i++ {
for j:=1; j<n; j++ {
dp[i][j] = dp[i][j-1]+dp[i-1][j]
}
}
return dp[m-1][n-1]
}
- 因为题目说明,多数是出现次数多于
n/2 的数,所以,只要对该数组排序,那么在数组中间的值即为需要的答案
func majorityElement(nums []int) int {
sort.Ints(nums)
return nums[len(nums)/2]
}
- 双指针,指针j在前面遍历,i在后面定位,若j位置的数不为0,则将j位置的值赋给i位置的,并将i指针往前走
func moveZeroes(nums []int) {
i := 0
for j:=0; j<len(nums); j++ {
if nums[j]!=0 {
nums[i] = nums[j]
if i!=j {
nums[j] = 0
}
i++
}
}
}