从零开始的力扣刷题记录-第七十三天

2490. 回环句-简单

题目描述:
句子 是由单个空格分隔的一组单词,且不含前导或尾随空格。
例如,“Hello World”、“HELLO”、“hello world hello world” 都是符合要求的句子。
单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。
如果句子满足下述全部条件,则认为它是一个 回环句 :
单词的最后一个字符和下一个单词的第一个字符相等。
最后一个单词的最后一个字符和第一个单词的第一个字符相等。
例如,“leetcode exercises sound delightful”、“eetcode”、“leetcode eats soul” 都是回环句。然而,“Leetcode is cool”、“happy Leetcode”、“Leetcode” 和 “I like Leetcode” 都 不 是回环句。
给你一个字符串 sentence ,请你判断它是不是一个回环句。如果是,返回 true ;否则,返回 false 。

题解:
按题目描述遍历并比较

代码(Go):

func isCircularSentence(sentence string) bool {
    s := strings.Split(sentence," ")
    for i := 0;i < len(s);i++{
        if i == len(s) - 1{
            if s[i][len(s[i]) - 1] != s[0][0]{
                return false
            }
        }else{
            if s[i][len(s[i]) - 1] != s[i + 1][0]{
                return false
            }
        }
    }
    return true
}

1295. 统计位数为偶数的数字-简单

题目描述:
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

题解:
转换成字符串查看长度是否能整除2即可

代码(Go):

func findNumbers(nums []int) int {
    re := 0
    for _,v := range nums{
        if len(strconv.Itoa(v)) % 2 == 0{
            re++
        }
    }
    return re
}

646. 最长数对链-中等

题目描述:
给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] = [lefti, righti] 且 lefti < righti 。
现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 = [c, d] 才可以跟在 p1 = [a, b] 后面。我们用这种形式来构造 数对链 。
找出并返回能够形成的 最长数对链的长度 。
你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。

题解:
和最长子序列差不多的思路,可以用动态规划也可以用贪心。之前一直用的动态规划,这次用一下贪心。自己写的时候忘了二分法查找,放下官方解

代码(Go):

func findLongestChain(pairs [][]int) int {
    sort.Slice(pairs, func(i, j int) bool { return pairs[i][0] < pairs[j][0] })
    arr := []int{}
    for _, p := range pairs {
        i := sort.SearchInts(arr, p[0])
        if i < len(arr) {
            arr[i] = min(arr[i], p[1])
        } else {
            arr = append(arr, p[1])
        }
    }
    return len(arr)
}

func min(a, b int) int {
    if a > b {
        return b
    }
    return a
}

1218. 最长定差子序列-中等

题目描述:
给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。
子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。

题解:
这题甚至不要求改变元素顺序,就很简单,直接哈希表作为dp数组即可,每遍历到一个元素都令其dp值等于它的值减去difference的dp值加一,遍历过程中记录最大值即可

代码(Go):

func longestSubsequence(arr []int, difference int) int {
    re := 0
    dp := map[int]int{}
    for _,v := range arr {
        dp[v] = dp[v - difference] + 1
        if dp[v] > re {
            re = dp[v]
        }
    }
    return re
}

总结

最近又忙起来了,这几天找点软柿子捏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值