【LeetCode】1796. 字符串中第二大的数字

news2024/9/25 1:24:53

题目描述

给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。
混合字符串 由小写英文字母和数字组成。

示例 1:

输入:s = “dfa12321afd”
输出:2
解释:出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。

示例 2:

输入:s = “abc1111”
输出:-1
解释:出现在 s 中的数字只包含 [1] 。没有第二大的数字。

提示:

1 <= s.length <= 500
s 只包含小写英文字母和(或)数字。

方法一:我的解法

class Solution {
public:
    int secondHighest(string s) {
        vector<int> nums;
        int secondNum = -1;
        for(int i=0; i<s.size(); i++){
            if(s[i] >= '0' && s[i] <='9')
                nums.push_back(s[i]-'0');
        }
        sort(nums.begin(), nums.end(), greater<int>()); // 大的优先
        for(auto& num : nums){
            if(num!=nums[0]){
                secondNum = num;
                break;
            }    
        }
        return secondNum;
    }
};

方法二:双指针遍历

class Solution {
public:
    int secondHighest(string s) {
        int firstNum = -1, secondNum = -1;
        for(auto& str : s){
            if(isdigit(str)){
                int cur = str - '0';
                if(cur > firstNum){
                    secondNum = firstNum;
                    firstNum = cur;
                }
                else if(cur < firstNum && cur > secondNum){
                    secondNum = cur;
                }
            }

        }

        return secondNum;
    }
};

心得

  • 这道题很简单,就是找到字符串中的第二大数字并返回,有以下两种情况返回 -1 :第一种是字符串中不存在数字,第二种是字符串中只存在同一个数字。
  • 第一种方法是我的思路,略显麻烦;
  • 第二种方法是官方题解,复杂度更低一些。
  • 方法一:我的解法
  • 思路:
    • 首先,我先遍历整个字符串,将数字保存在 数组nums
    • 使用 sort 函数对 nums 进行降序排序;
      这里补充一下 sort 函数的知识,我经常忘记,sort(起始地址,结束地址,[比较器]),它默认是升序,如果想要实现降序,需要使用比较器 greater<数据类型>()
    • 最后遍历 nums ,找到第一个和 nums[0] 不同的元素,也就是数组的最大元素。
  • 时间复杂度: O(n logn),等同于 sort 的时间复杂度;
  • 空间复杂度: O(n)
    在这里插入图片描述

方法二:官方题解

  • 思路
    我的方法是将数字保存在一个数组里,其实完全可以省略这个步骤,在遍历的时候,用两个指针,一个指向 firstNum ,一个指向 secondNum,每次遍历到一个新数字,就判断是否要更新两个指针,最后返回 secondNum 即可。
  • 此外,这个解法我需要学习的有:
    • 函数 isdigit(),可以直接判断该字符是否是数组。
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)
    在这里插入图片描述

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

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

相关文章

【网络层】动态路由算法、自治系统AS、IP数据报格式

文章目录路由算法路由表 --------协议自己算出最佳路由---找最少的跳数的路路由算法分类静态路由算法---手动配置---军事网络、小网络---缺点 路由更新慢动态路由算法----路由器之间彼此交换信息-------适合大型网络动态路由算法全局性链路状态 路由算法----------OSPF----所有…

远程办公:为远程桌面配置固定的公网TCP端口地址

在上一篇文章《远程办公&#xff1a;通过Cpolar内网穿透&#xff0c;远程桌面控制家里/公司内网电脑》中&#xff0c;我们通过cpolar映射远程桌面3389端口&#xff0c;成功实现了在外远程桌面控制家里/公司的Windows电脑。 但免费使用cpolar所生成的公网地址为随机公网地址&am…

linux软件管家——yum

文章目录1. yum1. 主要概念理解2. yum的使用1.查找软件2. 安装软件1.为什么要加上sudo提高权限?2.正常安装3.直接安装3.卸载软件1. 正常卸载2. 直接卸载3. 动态小火车的展示3. yum源1. 概念2. 查找yum源3. 替换yum源1. 备份yum源2. 更新国内yum源 注意事项 3. 缓存清空1. yum …

Isaac SDK Sim 环境

Isaac 是 NVIDIA 开放的机器人平台。其 Isaac SDK 包括以下内容&#xff1a; Isaac Apps: 各种机器人应用示例&#xff0c;突出 Engine 特性或专注 GEM 功能Isaac Engine: 一个软件框架&#xff0c;可轻松构建模块化的机器人应用Isaac GEMs: 感知、规划到驱动的模块化算法包&a…

使用VC++输出调频波

接此&#xff1b; 使用VC输出调幅波的数值和波形_bcbobo21cn的博客-CSDN博客 前面是基本的调幅&#xff1b;下面来看一下基本的调频&#xff1b; 调频就是使载波的频率随调制信号的频率改变&#xff1b;载波是一个等幅的高频振荡&#xff1b;调制信号就是要传递的信息&#…

ARM mkv210_image.c 文件详解

一、mkv210_image.c 的使用演示 裸机程序中的 Makefile&#xff08;实际上真正的项目的 Makefile 都是这样的&#xff09;是把程序的编译和链接过程分开的。&#xff08;平时我们用 gcc a.c -o exe 这种方式来编译时&#xff0c;实际上把编译和链接过程一步完成了。在内部实际…

WebRTC实战-第二章-使用WebRTC实现音视频通话

目录参考理论iceServerWebRTC共分成三个API&#xff0c;分别对应上面三个作用。getUserMedia调用流程开发步骤leave、peer-leave信令实现offer、answer、candidate信令实现开发获取浏览器的流常规设置设置限制条件创建RTCPeerConnectionRTCDataChannelWebRTC Security外部函数库…

【经验】Word 2021|如何在Word里做出和Markdown中一样漂亮的引用样式

文章目录写在最前方法以及参数1 打开样式窗口2 设置一些基本操作3 打开格式窗口4 修改样式最后一步&#xff01;保持间隔成品自取写在最前 Word 版本&#xff1a;2021 灵感来自 知乎奶茶叔的回答&#xff0c;以及我自己平时打代码用的代码块样式。但是我将分享我精心调配的参数…

HTML5期末大作业:HTM+CSS+JS仿安徽开放大学官网(web前端网页制作课作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]计算机毕业设计养生药膳推荐系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Tsinghua:Finding Skill Neurons in Pre-trained Transformer-based Language Models

这篇文章我觉得研究的挺有意思的。 找到神经网络中最有帮助的神经元的一个过程。这个过程的价值是减少PLM参数的前提下&#xff0c;还能提高模型的效果。 在本文中&#xff0c;我们发现在对特定任务进行快速调整后&#xff0c;预训练的 Transformers1 中某些神经元的激活可以高…

Keras计算机视觉(二)

第一部分 认识CNN 一、quickly start 所见即所得&#xff0c;先看一下CNN在MNIST上的运行Demo from keras import layers from keras import modelsmodel models.Sequential() # 定义一个卷积输入层&#xff0c;卷积核是3*3&#xff0c;共32个&#xff0c;输入是(28, 28, 1…

后端开发怎么做得更优秀?记住这15个好习惯

目录 一. 注释尽可能全面&#xff0c;要写有意义的注释 二. 项目拆分合理的目录结构 三. 尽量不在循环里远程调用或者数据库操作&#xff0c;优先考虑批量进行 四. 封装方法形参 五. 封装通用模板 六. 封装复杂的逻辑判断条件 七. 保持优化性能的嗅觉 八. 可变参数的配…

图的初识·遍历

文章目录深度优先搜索[DFS]实现代码广度优先搜索【BFS】思路图解代码实现广度优先遍历【BFS】图的结构深度优先搜索[DFS] 并不唯一&#xff0c;只是一种情况A−>IA->IA−>I 实现代码 使用邻接表表示图。遍历的时间复杂度O(VE)O(VE)O(VE)&#xff1b;邻接矩阵的时间…

使用 Python 和 OpenCV 制作反应游戏

在本文中&#xff0c;将向你展示如何使用 OpenCV 在 Python 中制作一个反应游戏&#xff0c;你可以动手来玩。你可能已经熟悉 OpenCV&#xff0c;OpenCV 基本上允许进行各种图像处理。你可以在下面的视频中看到最终结果&#xff0c;并且可以在此处获取文件&#xff1a;https://…

jsp4S店管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 4S店管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…

海带软件分享——日常办公学习软件下载安装(百度网盘 | 收藏)

>>>深度学习Tricks&#xff0c;第一时间送达<<< &#x1f680; 写在前面 &#x1f431;‍&#x1f3cd; 本期开始&#xff0c;小海带会定期推荐一些日常办公学习软件及趣味网址&#xff08;内含安装教程&#xff09;&#xff0c;供大家学习交流参考 ~ 小伙…

三层交换技术

数据来源 一、三层交换技术出现背景&#xff1a; 解决之前给网段划分VLAN控制端口&#xff0c;然后使用路由器设置单臂路由的让不同VLAN可以通信的缺点&#xff0c; 单臂路由缺点&#xff1a; 1&#xff09;容易出现网络瓶颈 2&#xff09;容易发生单点物理故障 3&a…

[附源码]Python计算机毕业设计Django海南与东北的美食文化差异及做法的研究展示平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

设计一个互联网交换设备的SNMP MIB库“X-MIB”

设计一个互联网交换设备的SNMP MIB库“X-MIB”&#xff1a; 问题描述 设备型号&#xff1a;字符串类型 设备生产厂商&#xff1a;字符串类型 设备名称&#xff1a;字符串类型 设备位置&#xff1a;字符串类型 设备运行时间&#xff1a;Timeticks 类型 设备队列数&#xff…