![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode-golang
anakinsun
生来孤独
展开
-
Leetcde Golang 26. Remove Duplicates from Sorted Array.go
思路两个指针差一然后一起前进,发现相同的就删除codefunc removeDuplicates(nums []int) int { for i, j := 0, 1; i < j && j < len(nums); { if nums[j] == nums[i] { nums = append(nums[:i], nums[i+1:]...) ...原创 2019-03-29 21:38:11 · 121 阅读 · 0 评论 -
Leetcode Golang 27. Remove Element.go
思路暴力解决codefunc removeElement(nums []int, val int) int { if nums == nil { return 0 } for i := 0; i < len(nums); { if nums[i] == val { nums = append(nums[:i], nums[i+1:]...) i-- }...原创 2019-03-29 21:39:34 · 371 阅读 · 0 评论 -
Leetcode Golang 33. Search in Rotated Sorted Array.go
思路类似二分查找的思路,每次需要判断前进的方向codefunc search(nums []int, target int) int { lo := 0 hi := len(nums) - 1 for lo < hi { mid := (lo + hi) / 2 if nums[mid] == target { return mid } if nums[l...原创 2019-03-29 21:41:59 · 184 阅读 · 0 评论 -
Leetcode Golang 35. Search Insert Position.go
思路二分查找codefunc searchInsert(nums []int, target int) int { if target < nums[0] { return 0 } l := len(nums) if target > nums[l-1] { return l } left, right := 0, l-1 for left <= ri...原创 2019-03-29 21:43:02 · 134 阅读 · 0 评论 -
Leetcode Golang 38. Count and Say.go
思路先写一个计算个数的方法,然后递归运行codefunc countAndSay(n int) string { if n == 1 { return "1" } return count(countAndSay(n - 1))}func count(s string) string { c := string(s[0]) count := 1 res := "" f...原创 2019-03-29 21:44:41 · 173 阅读 · 0 评论 -
Leetcode Golang 46. Permutations.go
思路回溯算法需要注意的是,填充结果的时候,需要copy一个slicecodefunc permute(nums []int) [][]int { var ret [][]int l := len(nums) if l == 0 { return ret } helper(nums, 0, l-1, &ret) return ret}func helper(nu...原创 2019-03-29 21:46:03 · 407 阅读 · 0 评论 -
Leetcode Golang 53. Maximum Subarray.go
思路循环一次,记录当前的最大值,当前最大值小于0的时候,重新开始codefunc maxSubArray(nums []int) int { cur := nums[0] sum := nums[0] for i := 1; i < len(nums); i++ { if sum >= 0 { sum += nums[i] } else { sum =...原创 2019-03-29 21:48:23 · 127 阅读 · 0 评论 -
Leetcode Golang 56. Merge Intervals.go
思路先把起点和终点集合在一起,排序,然后再循环合并注意处理中间不连续的情况codefunc merge(intervals []Interval) []Interval { l := len(intervals) var ( starts []int ends []int res []Interval ) for _, v := range intervals...原创 2019-03-29 21:50:39 · 372 阅读 · 0 评论 -
Leetcode Golang 58. Length of Last Word.go
思路先用空格分割字符串,注意处理连续空格,直接计算最后一个即可codefunc lengthOfLastWord(s string) int { arr := strings.Split(strings.Trim(s, " "), " ") length := len(arr) res := 0 for i := length - 1; i >= 0; i-- { if a...原创 2019-03-29 21:52:22 · 145 阅读 · 0 评论 -
Golang Leetcode 167. Two Sum II - Input array is sorted.go
思路从两端向中间遍历codefunc twoSum(numbers []int, target int) []int { l, r := 0, len(numbers)-1 for l < r { if numbers[l]+numbers[r] < target { l++ } else if numbers[l]+numbers[r] > target...原创 2019-04-04 09:43:12 · 190 阅读 · 0 评论 -
Golang Leetcode 169. Majority Element.go
思路假设第一个元素是众数,记录它的数量,遍历如果和众数相等,就递增,否则就递减如果数量等于0,说明不是众数,重新开始codefunc majorityElement(nums []int) int { c := nums[0] count := 1 for i := 1; i < len(nums); i++ { if nums[i] == c { count++...原创 2019-04-04 09:48:35 · 224 阅读 · 0 评论 -
Golang Leetcode 179. Largest Number.go
思路实现内置的排序接口来进行排序codetype intSlice []intfunc newIntSlice(a []int) intSlice { b := intSlice{} for _, v := range a { b = append(b, v) } return b}func (s intSlice) Len() int { return len(s)...原创 2019-04-04 09:51:47 · 293 阅读 · 0 评论 -
Golang Leetcode 189. Rotate Array.go
思路利用golang的slice操作方法需要注意的是,旋转的长度有可能大于数组本身的长度codefunc rotate(nums []int, k int) { if k == 0 || len(nums) == 0 { return } k = k % len(nums) if k == 0 { return } tmp := nums nums = append(...原创 2019-04-04 09:53:07 · 258 阅读 · 0 评论 -
Golang Leetcode 198. House Robber.go
思路dp解法:状态方程:dp[i] = max(dp[i-2]+nums[i],dp[i-1])到当前的house时,有两种情况:1.抢了前面一个,那么当前这个不能抢2.抢了前面的前面的那个,那么当前这个可以抢所以当前的收益,等于上面两种情况的最大值codefunc rob(nums []int) int { if len(nums) == 0 { return 0 }...原创 2019-04-04 09:56:44 · 207 阅读 · 0 评论 -
Golang Leetcode 200. Number of Islands.go
思路dfs,深度优先搜索首先找到一个等于1的节点然后递归的去看周围四个方向的节点是不是也是1codefunc numIslands(grid [][]byte) int { if len(grid) == 0 { return 0 } ret := 0 for i := 0; i < len(grid); i++ { for j := 0; j < len(g...原创 2019-04-04 09:59:11 · 289 阅读 · 0 评论 -
Golang Leetcode 202. Happy Number.go
思路可以证明的是,如果某一步的结果等于4,那么就会陷入无限循环递归计算,判断最后结果就ok了codefunc isHappy(n int) bool { return isOne(n)}func getSum(n int) int { if n/10 == 0 { return n * n } return (n%10)*(n%10) + getSum(n/10)}fu...原创 2019-04-04 10:01:59 · 418 阅读 · 0 评论 -
Golang Leetcode 203. Remove Linked List Elements.go
思路用一个指针负责跟踪head的前一个节点发现目标之后,直接跳过该节点codefunc removeElements(head *ListNode, val int) *ListNode { if head == nil { return head } var p1 ListNode p1.Next = head p2 := &p1 for head != nil ...原创 2019-04-04 10:07:21 · 135 阅读 · 0 评论 -
Golang Leetcode 206. Reverse Linked List.go
思路反转链表是链表算法里面比较基础的,可以在纸上推导一下这个过程加深理解重点是,反转的过程中不能丢失节点codetype ListNode struct { Val int Next *ListNode}func reverseList(head *ListNode) *ListNode { var newh ListNode for head != nil { ne...原创 2019-04-04 10:09:40 · 211 阅读 · 0 评论 -
Golang Leetcode 207. Course Schedule.go
思路DAG,顾名思义,如果一个有向图中从任意点出发都不能回到该点的话,这张图就是一个有向无环图判断一个有向图是否有环,有两个算法:拓扑排序即找出该图的一个线性序列,使得需要事先完成的事件总排在之后才能完成的事件之前。如果能找到这样一个线性序列,则该图是一个有向无环图DFS遍历图中的所有点,从i点出发开始DFS,如果在DFS的不断深入过程中又回到了该点,则说明图中存在回路。第一次知道这...原创 2019-04-04 10:14:02 · 386 阅读 · 0 评论 -
Golang Leetcode 210. Course Schedule II.go
思路这是上一个题目的延续,上一个要求判断是否可以走通,这个要求输出路径首先解释一下,入度的意思,就是前续节点的数量,也就是说有多少个节点走向当前这个节点设置一个队列第一步现将所有入度为0的节点保存在队列中然后,出队列,并将该节点的后续节点的入度减一如果后续节点的入度变成0,入队列最后将结果逆序codefunc findOrder(numCourses int, prerequis...原创 2019-04-05 14:45:29 · 214 阅读 · 0 评论 -
Leetcode Golang 61. Rotate List.go
思路先把list变成一个环,然后转到指定位置注意有个取模的处理codefunc rotateRight(head *ListNode, k int) *ListNode { if head == nil || head.Next == nil || k == 0 { return head } len := 1 tail := head for tail.Next != n...原创 2019-03-30 17:38:02 · 297 阅读 · 0 评论 -
Leetcode Golang 64. Minimum Path Sum.go
思路二维的dpdp方程是:到达每个点的时候,最小和初始值都是0转换方程:当前的dp值,等于之前两种走法的最小值注意处理走到边上的情况codefunc minPathSum(grid [][]int) int { m := len(grid) if m == 0 { return 0 } n := len(grid[0]) for i := 0; i < m...原创 2019-03-30 17:41:21 · 268 阅读 · 0 评论 -
Leetcode Golang 66. Plus One.go
思路注意处理有进位的情况codefunc plusOne(digits []int) []int { l := len(digits) for i := l - 1; i >= 0; i-- { if digits[i] < 9 { digits[i]++ return digits } digits[i] = 0 } //如果有进位 res ...原创 2019-03-30 17:43:10 · 176 阅读 · 0 评论 -
Leetcode Golang 70. Climbing Stairs.go
思路dp的基础题目,走到当前一级台阶有两种方法,之前走一步,或者走两步codefunc climbStairs(n int) int { if n < 2 { return 1 } tmp := []int{1, 2} for i := 2; i < n; i++ { tmp = append(tmp, tmp[i-1]+tmp[i-2]) } return ...原创 2019-03-30 17:45:06 · 130 阅读 · 0 评论 -
Leetcode Golang 71. Simplify Path.go
codefunc simplifyPath(path string) string { dirs := strings.FieldsFunc(path, func(s rune) bool { if s == '/' { return true } return false }) for i := 0; i < len(dirs); i++ { if dirs[...原创 2019-03-30 17:46:33 · 138 阅读 · 0 评论 -
Leetcode Golang 75. Sort Colors.go
思路暴力循环codefunc swap(nums []int, i, j int) { tmp := nums[i] nums[i] = nums[j] nums[j] = tmp}func sortColors(nums []int) { l, i, r := 0, 0, len(nums)-1 for i <= r { if nums[i] == 0 { ...原创 2019-03-30 17:47:36 · 176 阅读 · 0 评论 -
Leetcode Golang 77. Combinations.go
思路看到这个词,马上就想到了回溯codefunc combine(n int, k int) [][]int { var res [][]int helper(&res, []int{}, 1, n, k) return res}func helper(res *[][]int, coms []int, start int, n int, k int) { if k =...原创 2019-03-30 17:48:53 · 450 阅读 · 0 评论 -
Leetcode Golang 78. Subsets.go
思路dfs方法,注意中间结果一定要copy到新的变量中,不然会得到空值codevar ans [][]intfunc subsets(nums []int) [][]int { ans = [][]int{} cur := []int{} for i := 0; i <= len(nums); i++ { dfs(nums, i, 0, cur) } return a...原创 2019-03-30 17:49:50 · 383 阅读 · 0 评论 -
Leetcode Golang 79. Word Search.go
codefunc help(b [][]byte, word string, i, j int) bool { if word == "" { return true } if b[i][j] != word[0] { return false } if len(word) == 1 { return true } b[i][j] = '#' if i > 0 ...原创 2019-03-30 17:50:48 · 184 阅读 · 0 评论 -
Leetcode Golang 81. Search in Rotated Sorted Array II.go
思路二分查找,注意到每个点的时候,都要判断方向codefunc search(nums []int, target int) bool { l := len(nums) if l == 0 { return false } left, right := 0, l-1 for left <= right { mid := left + (right-left)/2 ...原创 2019-03-30 17:52:06 · 169 阅读 · 0 评论 -
Golang leetcode 463. Island Perimeter.go
思路思路就是每一个为1的点,看它的上下左右是否也为1,若为1则有一边重复,最后加的时候要减去重复的边。codefunc islandPerimeter(grid [][]int) int { row := len(grid) col := len(grid[0]) count := 0 for i := 0; i < row; i++ { for j := 0; j <...原创 2019-04-10 10:05:26 · 106 阅读 · 0 评论 -
Golang leetcode 464. Can I Win.go
思路dp算法用bitmap保存中间状态codefunc helper(maxInt, left, bit int, dp map[int]bool, bitmap []int) bool { if val, ok := dp[bit]; ok { return val } if left <= maxInt { for i := maxInt; i >= left...原创 2019-04-10 10:06:37 · 101 阅读 · 0 评论 -
Golang leetcode 475. Heaters.go
思路用二分查找。对heaters进行sort,然后得到某个house的相对位置。再计算左右的距离。codefunc findRadius(houses []int, heaters []int) int { sort.Ints(heaters) ret := -1 for _, house := range houses { idx := sort.SearchInts(heate...原创 2019-04-10 10:08:26 · 197 阅读 · 0 评论 -
Golang leetcode 476. Number Complement.go
思路如果我们能知道该数最高位的1所在的位置,就可以构造一个长度和该数据所占位置一样长的一个掩码mask,然后概述和mask进行异或即可。codefunc findComplement(num int) int { mask := 1 tmp := num for tmp > 0 { mask <<= 1 tmp >>= 1 } return ...原创 2019-04-10 10:09:24 · 143 阅读 · 0 评论 -
Golang leetcode 494. Target Sum.go
思路假设原数组为S,目标值为target,那么原数组必然可以分成两个部分,一个部分里面的元素前面需要加-,即运算的时候应该是做减法,另一个部分里面的元素前面需要加+,即运算的时候应该是做加法;我们将做加法部分的数组记为P,做减法部分的数组记为N,举个例子,例如S = {1,2,3,4,5},target =3,那么有一种可以是1-2+3-4+5,即P = {1,3,5},N = {2,4}...原创 2019-04-10 10:19:03 · 139 阅读 · 0 评论 -
Golang leetcode 509. Fibonacci Number.go
思路简单的递归codefunc fib(N int) int { if N == 0 { return 0 } if N == 1 { return 1 } return fib(N-1) + fib(N-2)}更多内容请移步我的repo:https://github.com/anakin/golang-leetcode...原创 2019-04-10 10:19:59 · 129 阅读 · 0 评论 -
Golang leetcode 513. Find Bottom Left Tree Value.go
思路深度优先搜索整个树,记录层数每次搜索的时候,第一个碰到的元素,就是该层的最左子树codetype TreeNode struct { Val int Left *TreeNode Right *TreeNode}var maxd, val intfunc findBottomLeftValue(root *TreeNode) int { maxd = 0 val...原创 2019-04-10 10:21:09 · 133 阅读 · 0 评论 -
Golang Leetcode 515. Find Largest Value in Each Tree Row.go
思路前序遍历,先把每层的第一个节点加入结果数组,然后判断每个节点和第一个节点的大小codetype TreeNode struct { Val int Left *TreeNode Right *TreeNode}var res []intfunc largestValues(root *TreeNode) []int { res = []int{} preorde...原创 2019-04-10 10:22:25 · 93 阅读 · 0 评论 -
Golang Leetcode 213. House Robber II.go
思路分成两种情况考虑:打劫第一个house不打劫第一个house如果打劫第一个house,就不能打劫最后一个house否则就可以打劫最后一个最后取这两种情况的最大值codefunc rob(nums []int) int { l := len(nums) if l == 0 { return 0 } if l == 1 { return nums[0] } //...原创 2019-04-05 14:47:11 · 242 阅读 · 0 评论 -
Golang Leetcode 217. Contains Duplicate.go
思路用一个hash保存出现过的元素codefunc containsDuplicate(nums []int) bool { if len(nums) < 2 { return false } m := make(map[int]bool) for _, v := range nums { _, ok := m[v] if ok { return true ...原创 2019-04-05 14:48:35 · 210 阅读 · 0 评论