【算法】算法题-20231220

【算法】算法题-20231220_第1张图片


这里写目录标题

  • 一、674. 最长连续递增序列
  • 二、451. 根据字符出现频率排序
  • 三、692. 前K个高频单词

一、674. 最长连续递增序列

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:
输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。

示例 2:
输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增序列是 [2], 长度为1。

def test2(nums):
    res = 1
    ret = 1
    for i in range(1, len(nums)):
        if nums[i] > nums[i - 1]:
            ret += 1
            res = max(ret, res)
        else:
            ret = 1
    return res


nums = [2, 2, 2, 2, 2]
print(test2(nums))

二、451. 根据字符出现频率排序

中等
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
返回 已排序的字符串 。如果有多个答案,返回其中任何一个。

示例 1:
输入: s = “tree”
输出: “eert”
解释: 'e’出现两次,'r’和’t’都只出现一次。
因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。

示例 2:
输入: s = “cccaaa”
输出: “cccaaa”
解释: 'c’和’a’都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。

示例 3:
输入: s = “Aabb”
输出: “bbAa”
解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意’A’和’a’被认为是两种不同的字符。

from collections import Counter


def test(s):
    d = {}
    for i in s:
        if i not in d:
            d[i] = 1
        else:
            d[i] += 1
    dd = sorted(d.items(), key=lambda x: x[1], reverse=True)
    ddd = [i[0] * i[1] for i in dd]
    dddd = ''.join(ddd)
    return dddd

三、692. 前K个高频单词

中等
给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。

示例 1:
输入: words = [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2
输出: [“i”, “love”]
解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。
注意,按字母顺序 “i” 在 “love” 之前。

示例 2:
输入: [“the”, “day”, “is”, “sunny”, “the”, “the”, “the”, “sunny”, “is”, “is”], k = 4
输出: [“the”, “is”, “sunny”, “day”]
解析: “the”, “is”, “sunny” 和 “day” 是出现次数最多的四个单词,
出现次数依次为 4, 3, 2 和 1 次。

def test2(nums, k):
    d = {}
    for i in nums:
        if i not in d:
            d[i] = 1
        else:
            d[i] += 1
    dd = sorted(d.items(), key=lambda x: x[1], reverse=True)
    ddd = [i[0] for i in dd][0:k]
    return ddd


nums = ["i", "love", "leetcode", "i", "love", "coding"]
print(test2(nums, 2))

【算法】算法题-20231220_第2张图片

你可能感兴趣的:(数据结构与算法,算法,python,数据结构,leetcode,链表,贪心算法,最小二乘法)