【寒假第2天】LeetCode刷题

news2025/1/16 17:41:21

🌈一、选择题

👿第1题:

下面给出的四种排序法中( )排序法是不稳定性排序法

A.插入排序                  B.冒泡排序
C.归并排序                  D.堆,希尔排序,快速排序

答案:D

  • 为啥堆排序是不稳定的?

关于堆排序有大堆排序和小堆排序,但是他俩的本质都是沿着根节点找到叶子节点并比较两者的值交换。因此对于相同的关键字可能存在后面的先被交换到前面,因而堆排序不是稳定的。

比如:3 27 36 27,(小堆排序)
如果堆顶3先输出,则,第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27,这样说明后面的27先于第二个位置的27输出,不稳定。

  • 为啥选择排序是不稳定的?

什么是选择排序?每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

就比如:80*, 80, 60,                                (这个*代表两个相同数的顺序不一样。)

那第一次排序后的顺序是60,80, 80*

第2次排序后顺序不变60,80,80*,但是稳定的排序得到的结果是60,80*,80。就比如插入排序,它的区间是80*,80,60插入到两者之间,然后比较80*,60,最后交换,60,80*,80这个是稳定的,所以选择排序是不稳定的。

  • 希尔排序之所以不稳定,也是犯了上面的毛病,希尔排序是插入排序的亚种,它把一个无序数组分好几块分别进行排序,如果有重复的数字,也会顺序错误。
  • 快速排序也是一样的,他是先选择一个基数,然后小于等于这个基数的排在基数前面,大于的排在他后面。如果说A和B相等,A在前,但是我们选择A作为基数,那B=A是不是可以排在他前面,这是不是就造成不稳定了。

排序算法不稳定的含义是:

在排序之前,有两个数相等.但是在排序结束之后,它们两个有可能改变顺序。

只有以上4种排序是不稳定排序。



👿第2题:

对数据序列 { 15,9,7,8,20,-1,4 } 进行排序,
进行一趟后数据的排序变为 {9,15,7,8,20,-1,4 } ,
则采用的是( )算 法
A.直接选择排序          B.冒泡排序
C.直接插入排序          D.希尔排序

答案:C

答案解析:排序前到排序后,就15和9的位置发生了改变。

A选项:看到选择排序可以直接排除了,两头的数既不是最大值也不是最小值。

B选项:要是冒泡排序的话9在前面,20在后面,排除。

C选项:15,9形成一个区间,第一步就是把他俩的顺序交换,没毛病,符合题目。然后第3个数看看在不在这个区间内,在的话就进去,不在就更新边界。

D选项:如果是希尔排序的话,间隔是1,不可能仅仅只是15,9的顺序变化20,-1的顺序也会变化。



 👿第3题:

某学生信息表,设一组表示成绩的关键字序列 (24,15,32,28,19,10,40) 
采用直接插入排序时,当插入记录19到有序表时,
为找插入位置需比较次数为( )
A.2       B.3
C.4       D.5

答案:C 

大概是:24直接放进去 24
第一趟 15比24小放到24前面,比较1次 15 24
第二趟 32比24大放24后面,比较1次 15 24 32
第三趟 28比32小,比24大,比较2次 15 24 28 32
第四趟,19比32小,比28小,比24小,比15大,比较4次 15 19 24 28 32.



👿第4题:

关于堆排序复杂度分析的叙述中正确的是( )
A.堆排序的时间复杂度为 O(nlogn)。
B.整个构建堆的时间复杂度为 O(n)。
C.堆排序的空间复杂度为 O(1)。
D.堆排序是一种不稳定的排序算法。

答案:D 

 解析看第一题图。




🌈二、编程

🐴第1题:检查两个字符串是否相同

解题思路:

看到这个题我就想到了用哈希表映射这个思路,不知道各位小伙伴想到没,在寒假第一天我们就用过这个思路。

把出现在word1中的字母映射到哈希表上,出现一次就+1,然后在把word2上的单词映射到哈希表上,出现一次就-1,让两者互相抵消,直到每一种字母的偏差都小于等于3就完成任务了。

注意:不是全部偏差不大于3,而是每一种字母的偏差不大于3就可以。它的条件更宽松了。

class Solution {
public:
    bool checkAlmostEquivalent(string word1, string word2) {
        vector<int> hashtable(26,0); //定义一个26位空间的哈希表
        for(size_t i=0;i<word1.size();i++)
        {
            hashtable[word1[i]-'a']++;         //在字符串1中出现的就++在哈希表上
        }
        for(int i=0;i<word2.size();i++)
        {
            hashtable[word2[i]-'a']--;         //在字符串2上出现的就--在哈希表上
        }
        for(const auto& ch:hashtable)
        {
            if(abs(ch)>3)
            return false;
          
        }
          return true;
    }
};

这个-‘a’是因为,我们开辟的的空间是26个,从0开始的,但是‘a’-‘z’的ascll码是从97开始的,-‘a’就是-97,可以使他们的顺序正好对应我们上面开辟的空间。



🐴第2题:字符串解码 

提示:

1 <= s.length <= 30
s 由小写英文字母、数字和方括号 '[]' 组成
s 保证是一个 有效 的输入。
s 中所有整数的取值范围为 [1, 300] 

 解题思路:

这个题说难也不难,最重要的一步是[],怎么匹配的问题。也就是说[]中内容是一个整体,不能把[]中的内容分开这个是这里面的重中之难。

我想到的第一反应就是用栈,不知道各位的反应是啥,因为我做过一个配对'['   , ']'的问题,那个就是用栈的先进后出解决的,这个我也想到用栈来解决[]的配对问题。

这里我用了两个栈:数字栈tmp_stack, 字符栈str_stack,一个存的是数字,另一个存字符。

  • 整体遍历一遍数组,这里面一共有四种情况:
  1. 遇到的是数字,但是不清楚数字的大小,所以第一步是求数字大小num+=num*10+s[i]-'0'这里面有两个小细节:num是临时的,方便我们求出现的数字,用完后,num=0,再用下一个;2.之所以出现-‘0’是因为,数组中出现的是字符,比如0,来说,数组中出现的是字符'0',不是数字‘0’,把字符转换为数字就是-'0'。
  2. 遇到的是'[',遇到'['就代表入栈,现阶段就可以把数字存入数字栈了。接下来num可以等于0了,以便处理下一个数字部分。然后把'['压入栈中。
  3. 遇到的是']',遇到']'就代表出栈。此时就可以将字符栈中的字符弹出,直到弹出左括号结束,左括号代表结束的标志。接下来把弹出来的字符串进行一次完全的反转,然后弹出数字栈的栈顶元素tmp2_stack,并且重复拼接tmp2_stack次反转后的字符串。
  4. 遇到的是普通字符,这个最简单,直接压入符号栈。

这里我们用到了四个栈,

两个字符栈:str_stack和str2_stack,str2_stack主要的作用是储存反转后的字符串。

两个数字栈:tmp_stack和 tmp2_stack,tmp2_stack主要是存储栈顶的数字的。

class Solution {
public:
    string decodeString(string s) {
        stack<int> tmp_stack;   //数字栈,存放出现的数字
        string str_stack;  //字符栈,存放出现的字符
        
        int num=0;
       for(int i=0;i<s.size();i++)
       {
           //1.出现的是字符
           if(s[i]>='0'&&s[i]<='9')
           {
               num=num*10+s[i]-'0';    //把字符转化为数字
           }

            //2.出现的是'['
           else if(s[i]=='[')
            {
                tmp_stack.push(num);    //数字num进入数字栈中
                num=0;  //变成0,方便知道下一个数字的大小
                str_stack+=(s[i]);   //字符进入到字符栈中
            }

            //3.出现的是']',出现这个就代表出栈了。
           else if(s[i]==']')
            {
                string str2_stack;  //临时字符栈,
               int  j=str_stack.size()-1;
               while(str_stack[j]!='[')
                {
                    str2_stack+=str_stack[j];
                    str_stack.pop_back();
                    j--;
                }
                str_stack.pop_back();  //把'['弹出去
                int tmp2_stack=tmp_stack.top();
                tmp_stack.pop();
                reverse(str2_stack.begin(),str2_stack.end());
                for(int q=0;q<tmp2_stack;q++)
                {
                         str_stack+=str2_stack;
                }
            }
            else //4.普通字符
            { 
                  str_stack+=s[i];
            }
       }
        return str_stack;


    }
};

特别注意:

栈的函数名称,出栈:pop,入栈:push,返回栈顶元素:top。

 string容器也有出入栈的相关操作,push_back,pop_back,正好可以模拟字符栈。

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

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

相关文章

SCA 工具:开源安全威胁一手掌控

1、什么是 SCA SCA&#xff08;Software Composition Analysis&#xff09;软件成分分析&#xff0c;通俗的理解就是通过分析软件包含的一些信息和特征来实现对该软件的识别、管理、追踪的技术。我们知道在当今软件开发中&#xff0c;引入开源软件(注 1)到你的项目中&#xff…

线性DP-----(从某点走到某点求最值问题)

线性DP 线性dp问题是dp问题中比较简单的问题,通常一个状态转移方程就可以搞定,线性dp通常求最大值,最小值问题,下面介绍线性dp中从某点走到某点最值问题。 第一类问题(走一遍) 该类问题只走一遍,动态规划中用到的数组f(i,j)含义就是到达(i,j)点得到的最优解 例题1—数字三角形 …

分享88个JavaScript源码,总有一款适合您

JavaScript源码 分享88个JavaScript源码&#xff0c;总有一款适合您 JavaScript源码下载链接&#xff1a;https://pan.baidu.com/s/1guiYWOPKdP1zNW7T8P0caQ?pwd6666 提取码&#xff1a;6666 采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 下面是文件的名字&#xf…

jinja2 循环计数内置变量loop

变量内容loop.index循环迭代计数&#xff08;从1开始&#xff09;loop.index0循环迭代计数&#xff08;从0开始&#xff09;loop.revindex循环迭代倒序计数&#xff08;从len开始&#xff0c;到1结束&#xff09;loop.revindex0循环迭代倒序计数&#xff08;从len&#xff0d;1…

【正点原子FPGA连载】 第十八章双目OV5640摄像头HDMI显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十八章双目OV5…

jsp题库管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

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

Kafka集群安装

Apache kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;是消息中间件的一种&#xff0c;用于构建实时数据管道和流应用程序。Kafka官网&#xff1a;http://kafka.apache.org/安装环…

1-连续系统PID的Simulink仿真

以二阶线性传递函数。为被控对象&#xff0c;进行模拟PID控制。在信号发生器中选择正弦信号&#xff0c;仿真时取&#xff0c;&#xff0c;&#xff0c;输入指令为&#xff0c;其中A1.0,F0.20Hz。采用ODE45迭代方法&#xff0c;仿真时间为10s。PID控制器由Simulink下的工具箱提…

【Ansible】Ansible Jinja2 模板

Ansible Jinja2 模板 文章目录Ansible Jinja2 模板一、Ansible Jinja2 模板背景介绍二、JinJa2 模块1.JinJa2 是什么&#xff1f;2.Jinja2 必知会3.Jinja2 逻辑控制三、如何使用模板四、 实例演示一、Ansible Jinja2 模板背景介绍 目前 nginx 的配置文件在所有的服务器上都是相…

六种常见系统架构

六种常见系统架构 - 基础篇目录概述需求&#xff1a;设计思路实现思路分析1.URL管理2.微服务架构3.四、微服务架构4.多级缓存架构参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,m…

【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码

【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础&#xff0c;Unity官方的C#中级编程教程质量很高&#xff0c;于是开个帖子把跟着敲记录了部分价讲解和我自己的理解的代码存在这 原课程链接&#xff1a;添加链接描述 https://www.bilibili.com/video…

Java字符流(FileReader/FileWriter)

文章目录概念FileReader字符输入流相关方法和构造器FileWriter字符输出流相关方法和构造器为什么用完不close或flush&#xff0c;会写入不到数据&#xff1f;概念 在Java中&#xff0c;使用Unicode约定存储字符。字符流自动允许我们逐字符读/写数据&#xff0c;有助于执行16位…

2023年网络爬虫实训(第五天)

任务1&#xff1a;掌握re.match和re.search的用法,完成课堂代码.掌握基础通配符的用法如\w \s \d [] * ^ $.并完成作业4. 1.re.match() re.match&#xff08;&#xff09;的是从头匹配一个符合规则的字符串&#xff0c;从起始位置开始匹配&#xff0c;匹配成功返回一个对象&…

1.力扣刷题之二分查找

题目: 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 思路 解题 左闭右闭 左闭右开 题目: 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 思路 这道题首先要找出关键词:有序数组&#xff0c;元素不重复&#xff1b;这些都是使用二分法的前提条件&#x…

使用Stable Diffusion和Pokedex的描述生成神奇宝贝图片

还记得我们以前使用GAN、Clip、DALL-E生成神奇宝贝的文章吗&#xff0c;现在是时候使用Stable Diffusion了 在本文中&#xff0c;我将展示如何从神奇宝贝系列不同游戏中的Pokedex条目中获取神奇宝贝描述&#xff0c;并使用Stable Diffusion根据这些藐视生成图片&#xff0c;这样…

【基数排序】 C++高效实现

题目描述 给定你一个长度为 nnn 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 nnn。 第二行包含 nnn 个整数&#xff08;所有整数均在 1∼1091 \sim 10^91∼109 范围内&…

Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式?

“ 【小木箱成长营】设计模式系列文章(排期中)&#xff1a; Android 架构演进 设计模式 Android 常见的 4 种创建型设计模式(上) Android 架构演进 设计模式 Android 常见的 4 种创建型设计模式(下) Android 架构演进 设计模式 Android 常见的 6 种结构型设计模式(上) An…

vue2 中组件的生命周期

目录 一、组件的生命周期 1、什么是组件的生命周期&#xff1f; 2、生命周期的阶段划分&#xff1a; &#xff08;1&#xff09;创建阶段&#xff1a;beforeCreate、created、beforeMount、mounted ​&#xff08;2&#xff09;运行阶段&#xff1a;beforeUpdate、updatev…

【顺序表】数据结构,java代码实现

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#x1f353;&#x1f353;&#x1f353;&#xff0c;顺序表和数组有什么区别呢&#xff0c;我们带着这个疑问去接触顺序表&#xff0c;学习顺序表相关知识。&#x1f680;&#x1f680;&#x1f680; &#x1f9d1;个人主页&am…

商城系统春节氛围营造

春节将至&#xff0c;无论是线上还是线下&#xff0c;都在紧锣密鼓的进行春节营销&#xff0c;线下商家可以通过布置店铺&#xff0c;来营造节日氛围&#xff0c;那对于线上商城来说&#xff0c;又能从哪些方面进行氛围营造呢&#xff1f;今天&#xff0c;我们就以CRMEB Pro版系…