力扣刷题记录——697. 数组的度、728. 自除数 、821. 字符的最短距离

news2024/11/27 19:38:46

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——697. 数组的度、728. 自除数 、821. 字符的最短距离》。 

目录

697. 数组的度

        题目描述

        解题思路

        解题代码 

728. 自除数 

        题目描述

        解题思路

        解题代码 

821. 字符的最短距离

        题目描述

        解题思路

        解题代码 


697. 数组的度

题目描述

给定一个非空且只包含非负数的整数数组 nums,数组的  的定义是指数组里任一元素出现频数的最大值。

你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。

示例 1:

输入:nums = [1,2,2,3,1]
输出:2
解释:
输入数组的度是 2 ,因为元素 1 和 2 的出现频数最大,均为 2 。
连续子数组里面拥有相同度的有如下所示:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
最短连续子数组 [2, 2] 的长度为 2 ,所以返回 2 。

示例 2:

输入:nums = [1,2,2,3,1,4,2]
输出:6
解释:
数组的度是 3 ,因为元素 2 重复出现 3 次。
所以 [2,2,3,1,4,2] 是最短子数组,因此返回 6 。

解题思路

这个题目的难点在于如果出现多个次数相同的元素,到底哪一个是最优解。首先给自己提个醒,如果涉及到列表中元素需要数个数,那么一定要先用set去除重复项,要不然很容易报超时错误!主要是用字典将元素及其属性相关联,根据值查找键所用的方法为[k for (k,v) in sic.items() if v == value],这样可以将所有最高项生成一个列表,然后遍历这个列表中的元素,index获取第一个出现的元素,将列表倒序,第一个出现的索引即为原列表该元素最后一次出现的索引。将这两个作差,最小值即为待求元素。最后就很简单了,做一个列表切割,返回最终结果就可以了。

解题代码 

def findShortestSubArray(nums):
    if len(nums) == 1:
        return 1
    # 问题的关键在于如果最高次出现了多项,怎么确定哪一项才是真正的最优解
    num_dic = {}
    # 元素作为键,出现次数作为值
    set_dic_1 = {}
    for i in list(set(nums)):
        set_dic_1[i] = nums.index(i)
    for i in list(set(nums)):
        num_dic[i] = nums.count(i)
    max_ci = max(list(num_dic.values()))
    max_list = [k for (k,v) in num_dic.items() if v == max_ci]
    temp = {}
    for num in max_list:
        for i in range(len(nums) - 1, 0, -1):
            if nums[i] == num:
                end = i
                temp[end-set_dic_1[num]] = num
                break
    max_num = temp[min(list(temp.keys()))]

    l_index = nums.index(max_num)
    r_index = 0
    for i in range(len(nums)-1,0,-1):
        if nums[i]== max_num:
            r_index = i
            break
    return len(nums[l_index:r_index+1])

728. 自除数 

题目描述

自除数 是指可以被它包含的每一位数整除的数。

  • 例如,128 是一个 自除数 ,因为 128 % 1 == 0128 % 2 == 0128 % 8 == 0

自除数 不允许包含 0 。

给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。

示例 1:

输入:left = 1, right = 22
输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

示例 2:

输入:left = 47, right = 85
输出:[48,55,66,77]

解题思路

这题的关键在找到每位数,用字符串切片的方式会方便很多,然后就是while循环,以及判断最后一个,一定要注意边界问题。将目标元素添加到目标列表中,最终返回目标列表。

解题代码 

def selfDividingNumbers(left: int, right: int):
    result = []  #盛放结果的列表
    for i in range(left,right+1):
        count = 0
        temp_str = str(i)
        if "0" not in temp_str:
            while count <= len(temp_str) - 1:
                if i % int(temp_str[count]) != 0:
                    break
                if count == len(temp_str)-1:
                    result.append(i)
                count +=1
        else:
            pass

    return result

821. 字符的最短距离

题目描述

给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。

返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。

两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。

示例 1:

输入:s = "loveleetcode", c = "e"
输出:[3,2,1,0,1,0,0,1,2,2,1,0]
解释:字符 'e' 出现在下标 3、5、6 和 11 处(下标从 0 开始计数)。
距下标 0 最近的 'e' 出现在下标 3 ,所以距离为 abs(0 - 3) = 3 。
距下标 1 最近的 'e' 出现在下标 3 ,所以距离为 abs(1 - 3) = 2 。
对于下标 4 ,出现在下标 3 和下标 5 处的 'e' 都离它最近,但距离是一样的 abs(4 - 3) == abs(4 - 5) = 1 。
距下标 8 最近的 'e' 出现在下标 6 ,所以距离为 abs(8 - 6) = 2 。

示例 2:

输入:s = "aaab", c = "b"
输出:[3,2,1,0]

解题思路

这题可以从左到右遍历一遍再从右到左遍历一遍,如果i为c的话count就为0,否则count累加,将结果储存一下。两次遍历取最小值就可以了。注意开始的时候,如果s[0]就等于c的话,好办,直接开始遍历就可以了。如果不等于c要把开始到c第一次出现之间的count进行倒叙,再添加到列表中。从右到左列表需要[::-1]变为正序,最后遍历两个列表,取相应位置的最小值,添加到目标列表中,最终返回这个目标列表。

解题代码 

def shortestToChar(s: str, c: str):
    # 从左到右遍历一遍,再从右到左遍历一遍,比较对应位置,选择最小的最为最终结果
    l_r = []
    r_l = []
    temp_1 = []
    temp_2 = []
    result = []
    count = 0
    if s[0]==c:
        for i in s:
            if i == c:
                count = 0
            else:
                count += 1
            l_r.append(count)
    else:
        for i in s[:s.index(c):]:
            if i == c:
                count = 0
            else:
                count += 1
            temp_1.append(count)
        l_r.extend(temp_1[::-1])
        for i in s[s.index(c)::]:
            if i == c:
                count = 0
            else:
                count += 1
            l_r.append(count)
    s = s[::-1]

    if s[0] == c:
        for i in s:
            if i == c:
                count = 0
            else:
                count += 1
            r_l.append(count)
    else:
        for i in s[:s.index(c):]:
            if i == c:
                count = 0
            else:
                count += 1
            temp_2.append(count)
        r_l.extend(temp_2[::-1])
        for i in s[s.index(c)::]:
            if i == c:
                count = 0
            else:
                count += 1
            r_l.append(count)
    r_l = r_l[::-1]   # 颠倒回来
    for i in range(len(r_l)):
        result.append(min(r_l[i],l_r[i]))

    return result

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云开发者2022年度热文盘点

01十亿人都在用的健康码运维体系如何设计&#xff1f;随着疫情防控模式的迭代&#xff0c;健康码访问DAU逐渐趋于下跌&#xff0c;意味着健康码将逐步完成历史使命&#xff0c;见证着疫情的结束。本文特邀腾讯研发工程师李雄政将从技术架构、可观测体系、运营保障体系等运维体系…

星德胜冲刺上交所上市:计划募资约10亿元,朱云舫为实际控制人

近日&#xff0c;星德胜科技&#xff08;苏州&#xff09;股份有限公司&#xff08;下称“星德胜”&#xff09;预披露更新招股书&#xff0c;准备在上海证券交易所主板上市。据贝多财经了解&#xff0c;星德胜于2022年7月1日递交上市申请&#xff0c;海通证券为其保荐机构。 …

java ssm学生成绩查询考务系统

1 绪论 1 1.1 项目背景 1 1.2 项目研究的目的和方法 1 1.2.1 项目的研究目的 1 1.2.2 开发方法及步骤 1 1.3 本章小结 2 2. 开发平台介绍 3 2.1 系统开发环境 3 2.1.1 Eclipse 3 2.2 相关技术 4 2.2.1 JSP技术 …

Web Spider 常见混淆EVAL、AA、JJ、JSFUCK

文章目录一、EVAL & constructor二、AA混淆三、JJ混淆四、JSFUCK五、针对混淆的方法简单hook总结混淆的原理&#xff1a;就是把原本清晰的代码故意搞得花里胡哨&#xff0c;让局外人看不懂&#xff1b; 混淆的目的&#xff1a;让逆向者很难理解代码的意图&#xff0c;无法读…

随笔集1.24

秋夜独坐经常性会出现啥都不想干的情况&#xff0c;似那黄鹤一去不复返&#xff0c;只留下脑海的白云千载空悠&#xff0c;对任何事情&#xff0c;读书、研究、游戏都提不起兴趣&#xff0c;每当此时静坐于窗下灯前&#xff0c;想起王摩诘所谓雨中山果落&#xff0c;灯下草虫鸣…

第二章-计算机网络物理层

文章目录计算机网络一、物理层1.1、物理层的基本概念1.2、数据通信的基本知识编码与调制编码调制混合调制信道的极限容量传输方式1.3、物理层下面的传输媒体导引型传输媒体非导引型传输媒体1.4、互联网接入技术电话网拨号接入数字用户线接入光纤同轴混合网接入光纤接入无线接入…

用友BIP对接外部旺店通企业版奇门系统

用友BIP对接外部旺店通企业奇门系统源系统:旺店通企业奇门慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通ERP起步&#xf…

Jetpack架构组件库:Lifecycle、LiveData、ViewModel

Lifecycle 添加依赖 dependencies {def lifecycle_version "2.5.1" // ViewModelimplementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"// ViewModel utilities for Composeimplementation "androidx.lifecycle:lifecy…

解决nes_py在pip安装报错的问题

目录 项目场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 解决结果&#xff1a; 项目场景&#xff1a; 想跟随油管某视频复现强化学习方法玩超级马里奥的过程&#xff0c;结果在在Anaconda3虚拟环境中用pip安装nes_py时一直报错&#xff0c;报错信…

基于Python实现的图像文字识别OCR工具,包含GUI界面附完整版代码可直接运行

引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作、生活中常常会用到,比如票据、漫画、扫描件、照片的文本提取。 博主基于 PyQt + labelme + PaddleOCR 写了一个桌面端的 OCR 工具,用于快速实现图片中文本区域自动检测 + 文本自动识别。 识别效果如下图所示:…

总结JDK中的时间日期类

在学习SpringMVC时&#xff0c;遇到了接收时间日期类型的参数的案例。 回顾JDK中与时间日期相关的API。 来系统地学习一下日期时间相关的API。 前置知识 在世界上有统一的时间标准 格林尼治时间&#xff0c;简称GMT&#xff08;以伦敦的本初子午线为标准&#xff09;&#x…

【BTC】数据结构

BTC 中对交易数据的存储主要涉及到了两种数据结构&#xff0c;一种是区块链&#xff0c;一种是 Merkle Tree。这两种数据结构组成了 BTC 中完整的区块链结构&#xff08;如下图所示&#xff09;&#xff0c;共同完成对数据的存储和验证&#xff0c;确保交易的有效性。 一、区块…

常见的反爬手段和解决思路

常见的反爬手段和解决思路 学习目标 了解 服务器反爬的原因了解 服务器常反什么样的爬虫了解 反爬虫领域常见的一些概念了解 反爬的三个方向了解 常见基于身份识别进行反爬了解 常见基于爬虫行为进行反爬了解 常见基于数据加密进行反爬 1 服务器反爬的原因 爬虫占总PV(PV是指…

基于nodejs+vue的中国古诗词的设计与实现

目 录 摘要 I Abstract II 1 绪论 1 1.1 选题背景 1 1.2 选题意义 1 1.3 研究内容 2 2 相关技术介绍 3 3 系统分析 5 3.1可行性分析 5 3.1.1 操作可行性 5 3.1.2 经济可行性 5 3.1.3 技术可行性 5 3.2 需求分析 5 3.2.1非功能性需求 …

Python学习——(数据类型及其常用函数)

目录 一、数据类型 判断数据类型type() 二、数据类型的转换 三、运算符 (一)算数运算符 (二)赋值运算符 (三)复合赋值运算符 (四)比较运算符 (五)逻辑运算符 四、输入输出 (一)输出 (二)输入 五、各数据类型常用函数 (一)数值函数 1.绝对值abs(x) 2.最大值max(…

Git + Jenkins 自动化 NGINX 发布简易实现

概述 之前基于 GitLab Jenkins 实现了简单的 NGINX 的自动化发布。 具体包含如下的组件&#xff1a; GitLab包括 GItLab 的 WebHook&#xff1b; Jenkins 及其插件&#xff1a;Generic Webhook TriggerPublish Over SSH &#x1f9e0;疑问&#xff1a; 为什么不用 Ansible&…

算法训练营DAY44|518. 零钱兑换 II、377. 组合总和 Ⅳ

这两道题是对于完全背包题型的另一个维度&#xff0c;都是求解给定背包容量求装满背包最多有几种方法的题目。两道题十分相像&#xff0c;但在遍历顺序上却又有着极其微妙的差别。 518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/coin…

看完流浪地球2,这些功课你必须要补

昨天看了流浪地球2&#xff0c;里面的信息量太大了&#xff0c;回来补充了一些功课&#xff0c;这些知识&#xff0c;看完&#xff0c;才算对流浪地球2有了进一步了解。地球人的航天路径我们的太空航程是什么样子的呢&#xff1f;要从第二次世界大战开始。回形针计划&#xff1…

金仓数据库简单巡检与事务阻塞会话简单处理

查看KES版本信息 使用version函数查看 这种方式能详细显示信息 使用ksql查看 查看license有效期 查看实例启动时间和运行时长 查看实例启动时间 查看KES无故障运行时长 查看数据库列表 使用元命令\l查看 使用字典查看 查看数据库占用的磁盘空间 统计当前数据库所占的磁盘空…

chrome在爬虫中的使用

chrome浏览器使用方法介绍 学习目标 了解 新建隐身窗口的目的了解 chrome中network的使用了解 寻找登录接口的方法 1 新建隐身窗口 浏览器中直接打开网站&#xff0c;会自动带上之前网站时保存的cookie&#xff0c;但是在爬虫中首次获取页面是没有携带cookie的&#xff0c;这…