[Leetcode]20天算法刷题计划之算法入门
Posted bfengj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Leetcode]20天算法刷题计划之算法入门相关的知识,希望对你有一定的参考价值。
前言
Leetcode里面的20天算法刷题计划中的算法入门部分的31道题,使用Go语言。
704. 二分查找
package question704
func Search(nums []int, target int) int
start,end := 0,len(nums)-1
for start <= end
mid := (start+end)/2
if nums[mid] == target
return mid
else if nums[mid] < target
start = mid+1
else
end = mid-1
return -1
278. 第一个错误的版本
package question278
/**
* Forward declaration of isBadVersion API.
* @param version your guess about first bad version
* @return true if current version is bad
* false if current version is good
* func isBadVersion(version int) bool;
*/
func firstBadVersion(n int) int
start,end := 1,n
for start <= end
mid := start + (end-start)/2
if isBadVersion(mid)
end = mid-1
else
start = mid + 1
return start
35. 搜索插入位置
package question35
func searchInsert(nums []int, target int) int
start,end := 0,len(nums)-1
for start <= end
mid := (start+end)/2
if nums[mid] == target
return mid
else if nums[mid] < target
start = mid+1
else
end = mid-1
return -1
977. 有序数组的平方
package question977
func sortedSquares(nums []int) []int
var index int = len(nums)-1
res := make([]int,len(nums))
left,right := 0,len(nums)-1
for left<=right
if nums[left]*nums[left] >= nums[right]*nums[right]
res[index] = nums[left]*nums[left]
left++
else
res[index] = nums[right]*nums[right]
right--
index--
return res
189. 轮转数组
package question189
func rotate(nums []int, k int)
n := len(nums)
k = k%n
reverse(nums)
reverse(nums[:k])
reverse(nums[k:])
func reverse(nums []int)
n := len(nums)
for i:=0;i<n/2;i++
temp := nums[i]
nums[i]=nums[n-i-1]
nums[n-i-1] = temp
283. 移动零
package question283
func moveZeroes(nums []int)
left,right,n := 0,0,len(nums)
for right < n
if nums[right] != 0
nums[left],nums[right] = nums[right],nums[left]
left++
right++
167. 两数之和 II - 输入有序数组
package question167
func twoSum(numbers []int, target int) []int
n := len(numbers)
left,right := 0,n-1
for left<right
sum := numbers[left]+numbers[right]
if sum==target
return []intleft+1,right+1
else if sum<target
left++
else
right--
return []int
344. 反转字符串
package question344
func reverseString(s []byte)
n := len(s)
for i:=0;i<(n>>1);i++
s[i],s[n-i-1] = s[n-i-1],s[i]
557. 反转字符串中的单词 III
package question557
import "strings"
func reverseString(s []byte) string
n := len(s)
for i:=0;i<(n>>1);i++
s[i],s[n-i-1] = s[n-i-1],s[i]
return string(s)
func reverseWords(s string) string
ss := strings.Split(s," ")
for i:=0;i<len(ss);i++
ss[i] = reverseString([]byte(ss[i]))
return strings.Join(ss," ")
876. 链表的中间结点
package question876
type ListNode struct
Val int
Next *ListNode
func middleNode(head *ListNode) *ListNode
var leftNode,rightNode *ListNode = head,head
for
if rightNode.Next==nil
return leftNode
else
rightNode = rightNode.Next.Next
leftNode = leftNode.Next
if rightNode==nil
return leftNode
19. 删除链表的倒数第 N 个结点
package question19
type ListNode struct
Val int
Next *ListNode
func removeNthFromEnd(head *ListNode, n int) *ListNode
hhead := &ListNode0,head
left,right := hhead,head
for i:=0;i<n;i++
right = right.Next
for ;right!=nil;left=left.Next
right = right.Next
left.Next = left.Next.Next
return hhead.Next
/*func removeNthFromEnd(head *ListNode, n int) *ListNode
left,right := head,head
for i:=0;i<n;i++
right = right.Next
if right==nil
return head.Next
for ;right.Next!=nil;left=left.Next
right = right.Next
left.Next = left.Next.Next
return head
*/
3. 无重复字符的最长子串
package question3
func max(x,y int) int
if x>y
return x
else
return y
/*func lengthOfLongestSubstring(s string) int
n := len(s)
mmax := max(n,128)
maxLength := 0
left,right := 0,0
for ;left<n;left++
myMap := make(map[byte]int)
for right=left;right<n&&right-left<mmax;right++
if myMap[s[right]]>0
break
myMap[s[right]]++
maxLength = max(maxLength,right-left)
if right==n
return maxLength
left += strings.Index(string([]byte(s)[left:right]), string(s[right]))
fmt.Println(left)
return maxLength
*/
func lengthOfLongestSubstring(s string) int
n := len(s)
mmax := max(n,128)
maxLength := 0
myMap := make(map[byte]int)
left,right := 0,0
for ;left<n;left++
if left != 0
myMap[s[left-1]]--
for ;right<n&&right-left<mmax;right++
if myMap[s[right]]>0
break
myMap[s[right]]++
maxLength = max(maxLength,right-left)
return maxLength
567. 字符串的排列
package question567
import "fmt"
func checkInclusion(s1 string, s2 string) bool
n1, n2 := len(s1), len(s2)
if n1>n2
return false
myMap := make(map[byte]int)
for i := 0; i < n1; i++
myMap[s1[i]]++
myMap[s2[i]]--
var diff int = 0
for _,k :=range myMap
if k!=0
diff++
if diff==0
return true
for i := n1; i < n2; i++
if myMap[s2[i-n1]]==0
diff++
myMap[s2[i-n1]]++
if myMap[s2[i-n1]]==0
diff--
if myMap[s2[i]]==0
diff++
myMap[s2[i]]--
if myMap[s2[i]]==0
diff--
fmt.Println(diff)
if diff == 0
return true
return false
/*func checkInclusion(s1 string, s2 string) bool
n1, n2 := len(s1), len(s2)
if n1>n2
return false
map1 := make(map[byte]int)
map2 := make(map[byte]int)
for i := 0; i < n1; i++
map1[s1[i]]++
map2[s2[i]]++
var fflag bool = true
for k, v := range map1
if map2[k]!=v
fflag = false
if fflag==true
return true
fmt.Println(map1)
for i := 1; i < n2-n1+1; i++
map2[s2[i-1]]--
map2[s2[i+n1-1]]++
fmt.Println(map1)
var flag bool = true
for k, v := range map1
if map2[k]!=v
flag = false
if flag==true
return true
return false
*/
733. 图像渲染
package question733
//BFS
func floodFill(image [][]int, sr int, sc int, newColor int) [][]int
target := image[sr][sc]
if target == newColor
return image
image[sr][sc] = newColor
queue := [][]int
xx := []int-1, 0, 0, 1
yy := []int0, -1, 1, 0
queue = append(queue, []intsr, sc)
for i := 0; i < len(queue); i++
nowEle := queue[i]
for j := 0; j < 4; j++
mx, my := nowEle[0]+xx[j], nowEle[1]+yy[j]
if mx >= 0 && my >= 0 && mx < len(image) && my < len(image[0]) && image[mx][my] == target
image[mx][my] = newColor
queue = append(queue, []intmx, my)
return image
695. 岛屿的最大面积
package question695
func maxAreaOfIsland(grid [][]int) int
res := 0
xx := []int-1, 0, 0, 1
yy := []int0, -1, 1, 0
for i := 0;i<len(grid);i++
for j := 0;j<len(grid[i]);j++
if grid[i][j]==0
continue
nowArea := 1
queue := [][]int
queue = append(queue,[]inti,j)
grid[i][j] = 0
for k := 0; k < len(queue);k++
nowEle := queue[k]
for p := 0; p < 4; p++
mx, my := nowEle[0]+xx[p], nowEle[1]+yy[p]
if mx >= 0 && my >= 0 && mx < len(grid) && my < len(grid[0]) && grid[mx][my] != 0
grid[mx][my] = 0
nowArea++
queue = append(queue, []intmx, my)
if nowArea>res
res = nowArea
return res
617. 合并二叉树
package question617
type TreeNode struct
Val int
Left *TreeNode
Right *TreeNode
//深度优先搜索
func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode
if root1==nil
return root2
else if root2==nil
return root1
root1.Val = root1.Val+root2.Val
root1.Left = mergeTrees(root1.Left,root2.Left)
root1.Right = mergeTrees(root1.Right,root2.Right)
return root1
116. 填充每个节点的下一个右侧节点指针
package question116
type Node struct
Val int
Left *Node
Right *Node
Next *Node
func connect(root *Node) *Node
if root == nil
return root
if root.Left != nil
root.Left.Next = root
root.Right.Next = root
if root.Next != nil
if root.Next.Right != root
root.Next = root.Next.Right
else if root.Next.Next == nil
root.Next = nil
else
root.Next = root.Next.Next.Left
connect(root.Left)
connect(root.Right)
return root
542. 01 矩阵
package question542
func updateMatrix以上是关于[Leetcode]20天算法刷题计划之算法入门的主要内容,如果未能解决你的问题,请参考以下文章