golang_Leetcode算法
本专栏介绍leetcode部分算法题目,部分题目配有注释并给出多种解题思路,希望对各位有所启发!
Grayan
尽情地享受好时光吧,我们不会再在如此年轻的时候相遇了。
展开
-
golang_算法: leetcode_207周周赛01-重新排列单词间的空格
package mainimport ( "fmt" "strings")/*给你一个字符串 text ,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。请你重新排列空格,使每对相邻单词之间的空格数目都 相等 ,并尽可能 最大化 该数目。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。返回 重新排列原创 2020-09-23 12:18:26 · 270 阅读 · 0 评论 -
golang_算法: leetcode_数组11-旋转图像
package mainimport "fmt"/*给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。作者:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhhkv/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得原创 2020-09-17 00:19:51 · 224 阅读 · 0 评论 -
golang_算法: leetcode_数组10-有效的数独
package mainimport "fmt"/*有效的数独判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。说明:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。给定数独序列只包含数字 1-9 和字符 '.' 。给定数独永远是 9x9 形式的。作者原创 2020-09-16 23:22:28 · 307 阅读 · 0 评论 -
golang_算法:leetcode_字符串08-[38]外观数列
package mainimport ( "fmt" "os" "strconv")//给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。//// 注意:整数序列中的每一项将表示为一个字符串。//// 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下://// 1. 1//2. 11//3. 21//4. 1211//5. 111221////// 第一项是数字 1原创 2020-07-06 23:03:34 · 217 阅读 · 0 评论 -
golang_算法: leetcode_字符串09-[14]最长公共前缀
方法: 利用strings.Index函数,拿第一个字符串与之后的字符串分别进行比较func Index(s, sep string) int子串sep在字符串s中第一次出现的位置,不存在则返回-1。package mainimport ( "fmt" "strings")//strings函数查看是否包含func longestCommonPrefix(strs []...原创 2019-03-17 23:39:58 · 454 阅读 · 0 评论 -
golang_算法: leetcode_字符串07-[28]实现strStr()
方法1: 长短指针,用[i:i+len(n)]的方式进行判读,注意数组越界问题方法2: 利用strings.Index函数,这道题完美诠释了这个函数!package mainimport ( "strings")//便利长指针,短指针,一旦遇见相同,立马判断短指针之后元素是否相同func strStr(haystack string, needle string) int { ...原创 2019-03-15 19:29:12 · 329 阅读 · 0 评论 -
golang_算法: leetcode_字符串06-[8]字符串转换整数 (atoi)
方法1:判断每个字节为数字,累乘10得到数字方法2:将数字放到字节切片中,利用strconv.Atoi转化为数字package mainimport ( "fmt" "math" "strconv" "strings")//方法1func myAtoi(str string) int { str = strings.TrimSpace(str) //将str前后端的所有空...原创 2019-03-14 15:57:27 · 359 阅读 · 0 评论 -
golang_算法: leetcode_字符串05-[125]验证回文字符串
方法1:package mainimport "fmt"//大小写字母算一个,逗号空格和其它特殊字符略过func isPalindrome(s string) bool { bytearr1 := make([]rune,3) bytearr2 := make([]rune,3) for _, v := range s { if v >= 'A' &&...原创 2019-03-12 20:15:55 · 304 阅读 · 0 评论 -
golang_算法: leetcode_字符串04-[242]有效的字母异位词
代码如下:package mainimport "fmt"//字母异位词,说明每个字母出现的个数都一致//用slice的话会因为排序的差异出现错误func isAnagram(s string, t string) bool { bytemap1 := make(map[rune]int) bytemap2 := make(map[rune]int) for _, v := r...原创 2019-03-12 14:33:02 · 209 阅读 · 0 评论 -
golang_算法: leetcode_字符串03-[387]字符串中的第一个唯一字符
package mainimport ( "fmt" "strings")//设计算法//第1种方法://利用数组,遍历++func firstUniqChar(s string) int { bytearr := make([]rune,126) for _, v := range s { bytearr[v]++ } for k, v := range s {...原创 2019-03-06 23:14:07 · 348 阅读 · 0 评论 -
golang_算法: leetcode_字符串02-[7]整数反转
//设计算法://弹出和推入func reverse(x int) int { res := 0 sign := 1 if x < 0 { x = -x sign = -1 } for x > 0 { res = res*10 + x%10 x /= 10 } res = res * sign if res < math.MinInt...原创 2019-03-05 13:29:10 · 182 阅读 · 0 评论 -
golang_算法: leetcode字符串01_[344]反转字符串
简单的前后对换package mainimport "fmt"//设计算法://遍历数据,前后对应的数值进行交换func reverseString(s []byte) { for i := 0; i <len(s)/2; i++ { fmt.Printf("s[i]=%c,= s[len(s)-i-1]=%c\n",byte(s[i]),byte(s[len(s)-i...原创 2019-03-05 12:50:37 · 494 阅读 · 0 评论 -
golang_算法: 数组09-两数之和
这个很简单,看了下其它用map实现的方法,略繁琐,暂不考虑----2019.3.4package mainimport "fmt"func twoSum(nums []int, target int) []int { var m []int for i := 0; i < len(nums); i++ { for j := i+1; j < len(nums); j+...原创 2019-03-04 13:55:49 · 238 阅读 · 0 评论 -
golang_算法: leetcode_数组08-移动零
package mainimport "fmt"//遍历数据,如果一个数值不为0,提至最前,一次操作,最后把所有0补上func moveZeroes(nums []int) { no := 0 for i := 0; i < len(nums); i++{ if nums[i] != 0 { nums[no] = nums[i] no++ } } fo...原创 2019-03-03 19:52:17 · 276 阅读 · 0 评论 -
golang_算法: leetcode_数组07-加一
package mainimport "fmt"//设计算法://99->1,0,0 999->1,0,0,0//从后往前遍历数组,如果末尾的数字为9,赋值为0,负责++//如果首端的数字为0,插入[]int{1}至最前端func plusOne(digits []int) []int { n := len(digits) for i := n - 1; i ...原创 2019-03-01 22:13:31 · 168 阅读 · 0 评论 -
golang_算法: leetcode_数组06-两个数组的交集 II
package mainimport "fmt"//设计算法://运用map,统计nums1中值出现的次数-map[值]次数//遍历nums2中的值,查看值是否在map中的出现func intersect(nums1 []int, nums2 []int) []int { m := make(map[int]int) var arr []int for _,v := rang...原创 2019-03-02 22:23:12 · 1195 阅读 · 0 评论 -
golang_算法: leetcode_数组05-只出现一次的数字
//设计算法://1.//1) 设置map[int]bool,默认的bool是false//注意有2种键值对,要分清://nums是数组,遍历中的键值对结构是0-值1,1-值2...//m是一个map,对应的是值1-true,值2-false...//2)进行判断所有值的全改成true,如果再遇到相同的v时,会执行m[v]==true的语句,m[v]会变为falsefunc s...原创 2019-02-25 21:11:00 · 425 阅读 · 0 评论 -
golang_算法: leetcode_数组04-存在重复
import "fmt"//1.func containsDuplicate1(nums []int) bool { for i := 0; i < len(nums); i++ { for j := i + 1; j < len(nums); j++ { if nums[i] == nums[j] { return true } } } ret...原创 2019-02-24 21:03:43 · 804 阅读 · 0 评论 -
golang_算法: leetcode_数组03-旋转数组
import "fmt"//空间复杂度为 O(1) ,不能使用其它数组////设计算法:////1.新建空间,将后k位数截取,后k位和前面的数字分别添加到新空间//func rotate1(nums []int, k int) {// var arr []int// l := len(nums)// arr = append(nums[(l-k):], nums[:l-k]...)...原创 2019-02-24 21:01:47 · 339 阅读 · 0 评论 -
golang_算法: leetcode_数组02-买卖股票的最佳时机 II
import "fmt"//2.设计算法//这个算法本质:当明天的价格比今天的价格贵的时候我们今天买,// 明天卖,这样能够获取最大利润//类似股票图,只要把所有的股市增长的全部加起来就行func maxProfit(prices []int) int { var profit int var i int for i = 0; i < len(prices)-1; i++...原创 2019-02-24 20:58:50 · 290 阅读 · 0 评论 -
golang_算法: 插入排序算法
插入排序算法-insertSort分析问题从数组第二位数字开始和前面的数字分别比较,如果前面的数字较大,则前面的数字后移设计算法确定arr[i]位置的元素将它与之前的元素arr[i-1]进行比较如果它之前的元素arr[i-1]较大,则将该位置的元素arr[i]赋值为它之前的元素,即arr[i]=arr[i-1]再将i-1,重复2和3的动作,直至i-1>=0如果arr...原创 2019-02-23 16:30:00 · 122 阅读 · 0 评论 -
golang_算法: 选择排序算法
选择排序算法1.分析问题:拿第n个数字和n+1及后面所有的数依次比较,小的移动到前面2.设计算法:1)第一次排序,下标为0的数字和1及后面所有的数依次比较,小的交换到前面2)第二次排序,下标为1的数字和2及后面所有的数依次比较,小的交换到前面...3)第n次排序,下标为n的数字和n+1及后面所有的数依次比较,小的交换到前面3.编写程序func main() { arr:=...原创 2019-02-21 16:24:31 · 193 阅读 · 0 评论