Golang leetcode刷题记录【二】

📒 笔记 · 02-27

Golang leetcode刷题记录


最后一个单词的长度

leetcode58

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

个人思路:使用标准库函数

  • 使用strings.Trim去除字符串前后的空格
  • 使用strings.Split将字符串按照空格分为单词数组
  • 获得数组中最后一个元素的长度
func lengthOfLastWord(s string) int {
    s = strings.Trim(s, " ")
    slice := strings.Split(s, " ")
    return len(slice[len(slice)-1])
}

2 的幂

leetcode231

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

个人思路:

  • n为非正数时为false
  • n>1是循环,查看n除以2的余数是否为0,如果不为0,返回false
  • 最后返回true,就是n=1的情况
func isPowerOfTwo(n int) bool {
    if n <= 0 {
        return false
    }
    for n > 1 {
        if n%2 != 0 {
            return false
        }
        n = n / 2
    }
    return true
}

搜索插入位置

leetcode35

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

个人思路:

  • 循环遍历数组,当遇到数组中元素的值和target相等时,直接返回index索引
  • 如果没遇到相等,就判断当前元素的值是否小于target,下个索引的值是否大于target.如果是,那么target就应该插入在这里。那么target的索引值就是index+1
func searchInsert(nums []int, target int) int {
    result := 0
    for index, item := range nums {
        if item == target {
            result = index
        }
        if item < target && (index == len(nums)-1 || nums[index+1] > target) {
            result = index + 1
        }
    }
    return result
}

存在重复元素

leetcode217

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

个人思路:

  • 新建映射保存每个元素出现的次数
  • 循环遍历nums,出现的每个元素的键值都+1
  • 循环遍历保存出现次数的映射,如果某个元素的键值>=2,即出现次数大于等于2,返回true。否则返回false
func containsDuplicate(nums []int) bool {
    result := make(map[int]int)
    for _, item := range nums {
        result[item] += 1
    }
    for _, item := range result {
        if item >= 2 {
            return true
        }
    }
    return false
}

多数元素

leetcode169

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

个人思路:

  • 建立空的映射,保存每个元素出现的次数
  • 循环遍历,更新映射为元素出现的次数
  • 循环遍历映射,如果某个元素出现的次数>n/2,返回
func majorityElement(nums []int) int {
    n:=len(nums)
    result := make(map[int]int)
    for _, item := range nums {
        result[item] += 1
    }
    num := 0
    for index, item := range result {
        if item > n/2 {
            num =  index
        }
    }
    return num
}
Go
Theme Jasmine by Kent Liao