1910 · 数组中出现次数最多的值

1609 · 链表的中间结点

  1. func MiddleNode(head *ListNode) *ListNode {
  2. // write your code here.
  3. if head == nil || head.Next == nil {
  4. return head
  5. }
  6. count := 0
  7. res := head
  8. for head != nil {
  9. count++
  10. if count%2 == 0 {
  11. res = res.Next
  12. }
  13. head = head.Next
  14. }
  15. return res
  16. }

1535 · 转换成小写字母

BenchmarkToLowerCase-8 100000000 10.19 ns/op

  1. func ToLowerCase(str string) string {
  2. // Write your code here
  3. s := []byte(str)
  4. for i := 0; i < len(s); i++ {
  5. if s[i] <= 'Z' && s[i] >= 'A' {
  6. s[i] += 32
  7. }
  8. }
  9. return string(s)
  10. }

1343 · 两字符串和-1

BenchmarkSumofTwoStrings-8 15157620 81.52 ns/op

  1. import (
  2. "strconv"
  3. )
  4. func SumofTwoStrings(a string, b string) string {
  5. // write your code here
  6. res := ""
  7. //从string尾部开始计算
  8. indexA, indexB := len(a)-1, len(b)-1
  9. for indexA >= 0 && indexB >= 0 {
  10. temp := a[indexA] - '0' + b[indexB] - '0'
  11. res = strconv.Itoa(int(temp)) + res
  12. indexA--
  13. indexB--
  14. }
  15. if indexA >= 0 {
  16. res = a[0:indexA+1] + res
  17. }
  18. if indexB >= 0 {
  19. res = b[0:indexB+1] + res
  20. }
  21. return res
  22. }

1334 · 旋转数组-1

BenchmarkRotate-8 72459829 16.88 ns/op

  1. func Rotate(nums []int, k int) []int {
  2. // Write your code here
  3. l := len(nums)
  4. if k%l==0 {
  5. return nums
  6. }
  7. k = k%l
  8. reverse(nums,0,l-k-1)
  9. reverse(nums,l-k,l-1)
  10. reverse(nums,0,l-1)
  11. return nums
  12. }
  13. func reverse(nums []int, left, right int) {
  14. for left < right {
  15. nums[left], nums[right] = nums[right], nums[left]
  16. left++
  17. right--
  18. }
  19. }

1331 · 英语软件

BenchmarkEnglishSoftware-8 27541000 44.32 ns/op

  1. func EnglishSoftware(score []int, ask []int) []int {
  2. // write your code here
  3. sCount := len(score)
  4. r := make([]int, len(ask))
  5. for i, v := range ask {
  6. c := 0
  7. for _, s := range score {
  8. if s <= score[v-1] {
  9. c++
  10. }
  11. }
  12. r[i] = (c - 1) * 100 / sCount
  13. }
  14. return r
  15. }

1300 · 巴什博弈

BenchmarkCanWinBash-8 1000000000 0.2862 ns/op

  1. func CanWinBash(n int) bool {
  2. // Write your code here
  3. if n % 4 == 0{
  4. return false
  5. }
  6. return true
  7. }

1141 · 月份天数

BenchmarkGetTheMonthDays-8 1000000000 0.2992 ns/op

  1. func GetTheMonthDays(year int, month int) int {
  2. // write your code here
  3. if month == 2 {
  4. if IsLeapYear(year) {
  5. return 29
  6. }
  7. return 28
  8. }
  9. if month == 4 || month == 6 || month == 9 || month == 11 {
  10. return 30
  11. }
  12. return 31
  13. }
  14. func IsLeapYear(n int) bool {
  15. // write your code here
  16. if n%4 == 0 && n%100 != 0 || n%400 == 0 {
  17. return true
  18. }
  19. return false
  20. }

1138 · 能否放置花-1

BenchmarkCanPlaceFlowers-8 375463814 3.448 ns/op

  1. func CanPlaceFlowers(flowerbed []int, n int) bool {
  2. // Write your code here
  3. length := len(flowerbed)
  4. for i, v := range flowerbed {
  5. //首尾部 当前值为0,且首部下一个index==0,尾部上一个index==0。可进行放置
  6. //中部 当前值为0 其前面一个和后面一个index均为0 方可放置
  7. if v == 0 && (i == 0 || flowerbed[i-1] == 0) && (i == length-1 || flowerbed[i+1] == 0) {
  8. n--
  9. //并将当前值置为1
  10. flowerbed[i] = 1
  11. if n <= 0 {
  12. return true
  13. }
  14. }
  15. }
  16. //n 为 0的情况
  17. return n == 0
  18. }

936 · 首字母大写

822 · 相反的顺序存储

BenchmarkReverseStore-8 12835638 97.49 ns/op

  1. func ReverseStore(head *ListNode) []int {
  2. // write your code here
  3. arr := []int{}
  4. for head != nil {
  5. arr = append(arr, head.Val)
  6. head = head.Next
  7. }
  8. //反转切片
  9. for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
  10. arr[i], arr[j] = arr[j], arr[i]
  11. }
  12. return arr
  13. }

807 · 回文数 II

BenchmarkIsPalindrome-8 27474980 43.69 ns/op

  1. func IsPalindrome(n int) bool {
  2. // Write your code here
  3. if n <= 1 {
  4. return true
  5. }
  6. a := toBinary(n)
  7. for i := 0; i <= len(a)-i-1; i++ {
  8. if a[i] == a[len(a)-i-1] {
  9. continue
  10. } else {
  11. return false
  12. }
  13. }
  14. return true
  15. }
  16. func toBinary(n int) []int {
  17. a := make([]int, 0, 32)
  18. for {
  19. a = append(a, n%2)
  20. n = n / 2
  21. if n == 1 {
  22. a = append(a, 1)
  23. break
  24. }
  25. }
  26. return a
  27. }

771 · 二阶阶乘

768 · 杨辉三角

BenchmarkCalcYangHuisTriangle-8 2757681 509.4 ns/op

  1. func CalcYangHuisTriangle(n int) [][]int {
  2. // write your code here
  3. tmp := []int{1}
  4. res := [][]int{}
  5. for i := 0; i < n; i++ {
  6. res = append(res, tmp)
  7. //每行的元素个数与当前行号相等
  8. //下一行的第i个元素为上一行的第j-1个元素与第i个元素之和
  9. for j := 1; j < i; j++ {
  10. res[i] = append(res[i], res[i-1][j-1]+res[i-1][j])
  11. }
  12. //其他的元素赋初值
  13. if i > 0 {
  14. res[i] = append(res[i], 1)
  15. }
  16. }
  17. return res
  18. }

BenchmarkCalcYangHuisTriangle-8 6527358 199.4 ns/op

  1. func CalcYangHuisTriangle(n int) [][]int {
  2. triangle := make([][]int, n)
  3. for i, _ := range triangle {
  4. triangle[i] = make([]int, i+1)
  5. // 外层
  6. triangle[i][0] = 1
  7. triangle[i][i] = 1
  8. // 内层
  9. if i >= 2 {
  10. for j := 1; j < len(triangle[i])-1; j++ {
  11. triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]
  12. }
  13. }
  14. }
  15. return triangle
  16. }

767 · 翻转数组

BenchmarkReverseArray-8 1000000000 1.138 ns/op

  1. func ReverseArray(nums []int) {
  2. // write your code here
  3. n := len(nums) - 1
  4. for i := 0; i < len(nums)/2; i++ {
  5. nums[i], nums[n-i] = nums[n-i], nums[i]
  6. }
  7. }

766 · 闰年

BenchmarkIsLeapYear-8 1000000000 0.2808 ns/op

  1. func IsLeapYear(n int) bool {
  2. // write your code here
  3. if n%4 == 0 && n%100 != 0 || n%400 == 0 {
  4. return true
  5. }
  6. return false
  7. }

764 · 计算圆周长和面积

BenchmarkCalculate-8 1000000000 0.2809 ns/op

  1. func Calculate(r int) []float64 {
  2. // write your code here
  3. PI := 3.14
  4. return []float64{float64(r) * 2 * PI, float64(r*r) * PI}
  5. }

594 · 字符串查找 II

BenchmarkStrStr-8 217115032 5.188 ns/op

  1. import "strings"
  2. func StrStr2(source string, target string) int {
  3. // write your code here
  4. return strings.Index(source, target)
  5. }

521 · 去除重复元素

BenchmarkDeduplication-8 16732713 75.24 ns/op

  1. func Deduplication(nums []int) int {
  2. if nums == nil || len(nums) == 0 {
  3. return 0
  4. }
  5. sort.Ints(nums)
  6. n := len(nums)
  7. i, j := 0, 1
  8. for ; i < n; i++ {
  9. for j < n && nums[j] == nums[i] {
  10. j++
  11. }
  12. if j >= n {
  13. break
  14. }
  15. nums[i+1] = nums[j]
  16. }
  17. return i + 1
  18. }

495 · 实现栈

492 · 队列维护

491 · 回文数

485 · 生成给定大小的数组

BenchmarkGenerate-8 30572190 37.48 ns/op

  1. func Generate(size int) []int {
  2. // write your code here
  3. slice := make([]int, size)
  4. for i := 0; i < size; i++ {
  5. slice[i] = i + 1
  6. }
  7. return slice
  8. }

484 · 交换数组两个元素

BenchmarkSwapIntegers-8 940372543 1.382 ns/op

  1. func SwapIntegers(a []int, index1 int, index2 int) {
  2. // write your code here
  3. a[index1], a[index2] = a[index2], a[index1]
  4. }

483 · 链表转数组

BenchmarkToArrayList-8 13093617 89.47 ns/op

  1. func ToArrayList(head *ListNode) []int {
  2. // write your code here
  3. arr := []int{}
  4. for head != nil {
  5. arr = append(arr, head.Val)
  6. head = head.Next
  7. }
  8. return arr
  9. }

480 · 二叉树的所有路径

479 · 数组第二大数

BenchmarkSecondMax-8 21445152 55.92 ns/op

  1. func SecondMax(nums []int) int {
  2. // write your code here
  3. sort.Ints(nums)
  4. return nums[len(nums)-2]
  5. }

478 · 简单计算器

BenchmarkCalculate-8 1000000000 0.2865 ns/op

  1. func Calculate(a int, op byte, b int) int {
  2. // write your code here
  3. res := 0
  4. switch op {
  5. case '+':
  6. res = a + b
  7. case '-':
  8. res = a - b
  9. case '*':
  10. res = a * b
  11. case '/':
  12. res = a / b
  13. }
  14. return res
  15. }

466 · 链表节点计数

BenchmarkCountNodes-8 837966589 1.420 ns/op

  1. func CountNodes(head *ListNode) int {
  2. // write your code here
  3. count := 0
  4. for head != nil {
  5. count ++
  6. head = head.Next
  7. }
  8. return count
  9. }

463 · 整数排序

BenchmarkSortIntegers-8 22559443 54.14 ns/op

  1. func SortIntegers(a []int) {
  2. // write your code here
  3. sort.Ints(a)
  4. }

449 · 字符转整数

BenchmarkCharToInteger-8 1000000000 0.2935 ns/op

  1. func CharToInteger(character byte) int {
  2. // write your code here
  3. return int(character)
  4. }

423 · 有效的括号序列

422 · 最后一个单词的长度

406 · 和大于S的最小子数组

366 · 斐波纳契数列

BenchmarkFibonacci-8 1000000000 0.2877 ns/op

  1. func Fibonacci(n int) int {
  2. // write your code here
  3. q, p := 0, 1
  4. if n <= 2 {
  5. return n - 1
  6. }
  7. for i := 2; i < n; i++ {
  8. sum := q + p
  9. q = p
  10. p = sum
  11. }
  12. return p
  13. }

353 · 最大字母

298 · 寻找素数

BenchmarkPrime-8 472503 2371 ns/op

  1. func Prime(n int) []int {
  2. // write your code here
  3. //var slice []int
  4. //这个不行 会返回null 我自己本地1.18.4测试的ok,估计lintcode版本低了...
  5. slice := []int{}
  6. for i := 2; i <= n; i++ {
  7. if isPrime(i) {
  8. slice = append(slice, i)
  9. }
  10. }
  11. return slice
  12. }
  13. func isPrime(n int) bool {
  14. if n < 2 {
  15. return false
  16. }
  17. for i := 2; i <= n/i; i++ {
  18. if n%i == 0 {
  19. return false
  20. }
  21. }
  22. return true
  23. }

297 · 寻找最大值

BenchmarkMaxNum-8 24588752 51.23 ns/op

  1. func MaxNum(nums []int) int {
  2. // write your code here
  3. sort.Ints(nums)
  4. return nums[len(nums)-1]
  5. }

283 · 三数之中的最大值

BenchmarkMaxOfThreeNumbers-8 1000000000 0.2795 ns/op

  1. func MaxOfThreeNumbers(num1 int, num2 int, num3 int) int {
  2. // write your code here
  3. tmp := max(num1, num2)
  4. return max(tmp, num3)
  5. }
  6. func max(a, b int) int {
  7. if a > b {
  8. return a
  9. }
  10. return b
  11. }

263 · 小括号匹配

241 · 转换字符串到整数(容易版)

BenchmarkStringToInteger-8 245307522 4.713 ns/op

  1. import "strconv"
  2. func StringToInteger(target string) int {
  3. // write your code here
  4. v, _ := strconv.Atoi(target)
  5. return v
  6. }

228 · 链表的中点

BenchmarkMiddleNode-8 397173186 2.987 ns/op

  1. func MiddleNode(head *ListNode) *ListNode {
  2. if head == nil || head.Next == nil || head.Next.Next == nil {
  3. return head
  4. }
  5. pre := head
  6. cur := head.Next.Next
  7. for cur.Next != nil && cur.Next.Next != nil{
  8. pre = pre.Next
  9. cur = cur.Next.Next
  10. }
  11. return pre.Next
  12. }

BenchmarkMiddleNode-8 169528088 6.928 ns/op

  1. func MiddleNode(head *ListNode) *ListNode {
  2. if head == nil {
  3. return head
  4. }
  5. node := head
  6. count := 0
  7. for head.Next != nil {
  8. count++
  9. head = head.Next
  10. if count%2 == 0 {
  11. node = node.Next
  12. }
  13. }
  14. return node
  15. }

BenchmarkMiddleNode-8 2439154 483.7 ns/op

  1. func MiddleNode(head *ListNode) *ListNode {
  2. if head == nil || head.Next == nil || head.Next.Next == nil {
  3. return head
  4. }
  5. count := 0
  6. m := map[int]*ListNode{}
  7. for head != nil {
  8. count++
  9. m[count] = head
  10. head = head.Next
  11. }
  12. if count%2 == 0 {
  13. return m[count/2]
  14. } else {
  15. return m[count/2+1]
  16. }
  17. }

225 · 在链表中找节点

BenchmarkFindNode-8 1000000000 1.055 ns/op

  1. func FindNode(head *ListNode, val int) *ListNode {
  2. // write your code here
  3. for head != nil {
  4. if head.Val == val{
  5. return head
  6. }
  7. head = head.Next
  8. }
  9. return nil
  10. }

220 · 冰雹猜想

BenchmarkGetAnswer-8 53053446 23.72 ns/op

  1. func GetAnswer(num int) int {
  2. // write your code here.
  3. count := 0
  4. for num != 1 {
  5. if num%2 == 0 {
  6. num /= 2
  7. } else {
  8. num = 3*num + 1
  9. }
  10. count++
  11. }
  12. return count
  13. }

219 · 在排序链表中插入一个节点

214 · 数组的最大值

BenchmarkMaxOfArray-8 707330299 1.713 ns/op

  1. func MaxOfArray(a []float32) float32 {
  2. // write your code here
  3. max := a[0]
  4. for i := 1; i < len(a); i++ {
  5. if a[i] > max {
  6. max = a[i]
  7. }
  8. }
  9. return max
  10. }

209 · 第一个只出现一次的字符

175 · 翻转二叉树

157 · 判断字符串是否没有重复字符

146 · 大小写转换 II

BenchmarkLowercaseToUppercase2-8 44616631 24.94 ns/op

  1. func LowercaseToUppercase2(letters string) string {
  2. // write your code here
  3. return strings.ToUpper(letters)
  4. }

BenchmarkLowercaseToUppercase2-8 94741827 12.33 ns/op

  1. func LowercaseToUppercase2(letters string) string {
  2. // write your code here
  3. strBytes := []byte(letters)
  4. for i := range strBytes {
  5. if strBytes[i] >= 'a' && letters[i] <= 'z' {
  6. strBytes[i] -= 32
  7. }
  8. }
  9. return string(strBytes)
  10. }

145 · 大小写转换

BenchmarkLowercaseToUppercase-8 1000000000 0.3236 ns/op

  1. func LowercaseToUppercase(character byte) byte {
  2. // write your code here
  3. return character-32
  4. }

133 · 最长单词

68 · 二叉树的后序遍历

67 · 二叉树的中序遍历

66 · 二叉树的前序遍历

60 · 搜索插入位置

56 · 两数之和

53 · 翻转字符串

50 · 数组剔除元素后的乘积

46 · 主元素

39 · 恢复旋转排序数组

BenchmarkName-8 100000000 11.25 ns/op

  1. func RecoverRotatedSortedArray(nums []int) {
  2. //write your code here
  3. //1.先找到后面一个数比前面大的索引值
  4. index := 0
  5. for i := 0; i < len(nums)-1; i++ {
  6. if nums[i] > nums[i+1] {
  7. index = i
  8. break
  9. }
  10. }
  11. //当index不发生改变的时候,说明传入的[]int是顺序的,无需修改。
  12. if index != 0{
  13. reverse(nums, 0, index)
  14. reverse(nums, index+1, len(nums)-1)
  15. reverse(nums, 0, len(nums)-1)
  16. }
  17. }
  18. func reverse(nums []int, left, right int) {
  19. for left < right {
  20. nums[left], nums[right] = nums[right], nums[left]
  21. left++
  22. right--
  23. }
  24. }

37 · 反转一个三位整数

BenchmarkReverseInteger-8 1000000000 0.2873 ns/op

  1. func ReverseInteger(number int) int {
  2. // write your code here
  3. return number%10*100 + number/10%10*10 + number/100
  4. }

25 · 打印X

BenchmarkPrintX-8 1361227 881.5 ns/op

  1. func PrintX(n int) []string {
  2. // write your code here
  3. //1.创建一个长度为 n 的 []string
  4. res := make([]string, n)
  5. //2.针对每一个[]里面,对其进行操作
  6. for i := 0; i < n; i++ {
  7. //3.每一个切片中,开辟大小为n的byte[]
  8. item := make([]byte, n)
  9. //4.每个[]byte中的item初始化为 ' '
  10. for j := range item {
  11. item[j] = ' '
  12. }
  13. //5.只需对当前的行切片[]byte的首尾两个index赋值为 'X' 即可
  14. item[i] = 'X'
  15. item[n-i-1] = 'X'
  16. //6.对 []string 赋相应的 []byte
  17. res[i] = string(item)
  18. }
  19. //7.返回结果
  20. return res
  21. }

23 · 判断数字与字母字符

BenchmarkIsAlphanumeric-8 1000000000 0.2794 ns/op

  1. func IsAlphanumeric(c byte) bool {
  2. // write your code here
  3. if c <= 'Z' && c >= 'A' || c <= 'z' && c >= 'a' || c <= '9' && c >= '0' {
  4. return true
  5. }
  6. return false
  7. }

14 · 二分查找

13 · 字符串查找

BenchmarkStrStr-8 225371284 5.191 ns/op

  1. func StrStr(source string, target string) int {
  2. // Write your code here
  3. return strings.Index(source, target)
  4. }

9 · Fizz Buzz 问题

BenchmarkFizzBuzz-8 6569154 180.0 ns/op

  1. func FizzBuzz(n int) []string {
  2. // write your code here
  3. if n == 0 {
  4. return []string{}
  5. }
  6. str := make([]string, n)
  7. for i := 1; i <= n; i++ {
  8. if i%15 == 0 {
  9. str[i-1] = "fizz buzz"
  10. } else if i%5 == 0 {
  11. str[i-1] = "buzz"
  12. } else if i%3 == 0 {
  13. str[i-1] = "fizz"
  14. } else {
  15. str[i-1] = strconv.Itoa(i)
  16. }
  17. }
  18. return str
  19. }

8 · 旋转字符数组

3 · 统计数字-1

  1. import (
  2. "strconv"
  3. )
  4. func DigitCounts(k int, n int) int {
  5. str := ""
  6. for i := 0; i <= n; i++ {
  7. str += strconv.Itoa(i)
  8. }
  9. count := 0
  10. for _, v := range str {
  11. //string 的本质是 []byte,取出来的是byte值
  12. //而k是int值,byte转为int值则是相应的ascii值。
  13. if k == int(v-'0'){
  14. count++
  15. }
  16. }
  17. return count
  18. }
  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func DigitCounts(k int, n int) int {
  6. count := 0
  7. strK := fmt.Sprintf("%d", k)//转成string
  8. for i := 0; i <= n; i++ {
  9. //利用Split包切分出k的string,并计数。
  10. count += len(strings.Split(fmt.Sprintf("%d", i), strK)) - 1
  11. }
  12. return count
  13. }
  1. func DigitCounts(k int, n int) int {
  2. num := 0
  3. if k == 0 {
  4. num++
  5. }
  6. for i := 0; i <= n; i++ {
  7. for m := i; m != 0; {
  8. j := m % 10
  9. m = m / 10
  10. if j == k {
  11. num++
  12. }
  13. }
  14. }
  15. return num
  16. }
  1. import (
  2. "strconv"
  3. )
  4. func DigitCounts(k int, n int) int {
  5. str := strconv.Itoa(n)
  6. maxBit := 6
  7. tenPow := make([]int, maxBit)
  8. tenPow[0] = 1
  9. for i := 1; i < maxBit; i++ {
  10. tenPow[i] = tenPow[i-1] * 10
  11. }
  12. res := 0
  13. for i := 0; i < len(str); i++ {
  14. curNum := int(str[i] - '0')
  15. count := 0
  16. // i位置前的可能性
  17. if i > 0 {
  18. if k != 0 {
  19. count = n / tenPow[len(str)-i] * tenPow[len(str)-1-i]
  20. } else {
  21. count = (n/tenPow[len(str)-i] - 1) * tenPow[len(str)-1-i]
  22. }
  23. }
  24. // i位置后面的可能性
  25. if i > 0 || k != 0 {
  26. if curNum > k {
  27. count += tenPow[len(str)-i-1]
  28. } else if curNum == k {
  29. count += n%tenPow[len(str)-i-1] + 1
  30. }
  31. }
  32. res += count
  33. }
  34. if k == 0 {
  35. res++
  36. }
  37. return res
  38. }
n值 10 100 1000 1000
346.1 ns/op 5646 ns/op 268662 ns/op 25957320 ns/op
1286 ns/op 12868 ns/op 148761 ns/op 1532715 ns/op
19.45 ns/op 234.2 ns/op 3011 ns/op 37756 ns/op
59.75 ns/op 94.48 ns/op 110.1 ns/op 122.3 ns/op

2 · 尾部的零

BenchmarkTrailingZeros-8 136642118 8.064 ns/op

  1. func TrailingZeros(n int64) int64 {
  2. // write your code here
  3. ans := int64(0)
  4. for n > 0 {
  5. n /= 5
  6. ans += n
  7. }
  8. return ans
  9. }

1 · A + B 问题

BenchmarkAplusb-8 1000000000 0.2842 ns/op

  1. func Aplusb(a int, b int) int {
  2. // write your code here
  3. return a+b
  4. }