【LeetCode】HOT 100(3)

news2024/12/28 18:22:49

题单介绍:

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。

目录

题单介绍:

题目:15. 三数之和 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

题目:22. 括号生成 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

写在最后:


题目:15. 三数之和 - 力扣(Leetcode)

题目的接口:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {

    }
};

解题思路:

突然发现LeetCode更新了一个新功能,可以查看题目的提示,

放出来看一眼:

好吧,我英语不好,但是我大概可以猜出这个提示,

好像不是教我们题目的解题思路,而是教题目的优化思路,可恶。

具体思路是:

遍历数组确定区间:

 双指针找 == 0的三数之和,注意去重情况即可。

(如果有连续的相同数字需要去重操作)

代码入下:

代码:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        if(nums.size() < 3) return {}; //特殊情况

        vector<vector<int>> vv; 
        sort(nums.begin(), nums.end()); //排序

        for(int i = 0; i < nums.size(); i++) { //遍历
            if(nums[i] > 0) return vv; //如果i已经>0,三数之和不可能>0
            if(i > 0 && nums[i] == nums[i - 1]) continue; //去重

            //左右指针
            int left = i + 1; 
            int right = nums.size() - 1;

            while(left < right) {
                //>0 right--找小,<0 left++找大
                if(nums[left] + nums[right] + nums[i] > 0) right--;
                else if(nums[left] + nums[right] + nums[i] < 0) left++;
                else { //找到了
                    vv.push_back(vector<int>{nums[i], nums[left], nums[right]}); 
                    left++;
                    right--;
                    
                    //去重
                    while(left < right && nums[left] == nums[left - 1]) left++;
                    while(left < right && nums[right] == nums[right + 1]) right--;
                }
            }
        }
        return vv;
    }
};

过过过过啦!!!!

题目:22. 括号生成 - 力扣(Leetcode)

题目的接口:

class Solution {
public:
    vector<string> generateParenthesis(int n) {

    }
};

解题思路:

这道题目的方法有很多,我打算就说两种最好理解,最简单的

一种是dfs搜索+剪枝,

还有一种是根据题目的规律解题,

都采用的是递归,

先说第二种方法:

我们可以根据左括号数量一定是大于等于右括号数量这个规律进行判断:

代码如下:

class Solution {
public:
    vector<string> res;
    vector<string> generateParenthesis(int n) {
        if(n <= 0) return res;
        get_par("", n, n);
        return res;
    }
private:
    void get_par(const string& s, int left, int right) {
        if(left == 0 && right == 0) {
            res.push_back(s);
            return;
        }
        if(left == right) get_par(s + "(", left - 1, right); //如果括号数相等,只能入左括号
        else if(left < right) { //如果左括号<有括号数,入哪个都行
            if(left > 0) get_par(s + "(", left - 1, right); //当然,如果左括号入完了就不能入了
            get_par(s + ")", left, right - 1);
        }
    }
};

然后是第一种方法,

深搜遍历所有情况,

如果情况不符就返回(剪枝),

将符合的情况push进数组即可。

代码如下:

代码:

class Solution {
public:
    vector<string> res;
    vector<string> generateParenthesis(int n) {
        dfs("", n, n);
        return res;
    }
private:
    void dfs(const string& s, int left, int right) {
        if(left < 0 || left > right) return; //剪枝
        if(left == 0 && right == 0) { //符合的情况
            res.push_back(s);
            return;
        }
        //搜索所有情况
        dfs(s + "(", left - 1, right);
        dfs(s + ")", left, right - 1);
    }
};

过过过过啦!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

1.Hive系列之简介

1. Hive简介 1.1 Hive是什么 Hive是一个基于Hadoop的数据仓库工具&#xff0c;它提供了类似于SQL的查询语言HiveQL&#xff0c;以及用于将查询转换为MapReduce任务的引擎。Hive的主要目的是使数据分析师和开发人员能够轻松地查询和分析存储在Hadoop集群中的数据&#xff0c;而…

如果我们使用大字符串作为 MySQL 索引键会发生什么

背景 正如我之前的文章里所解释的那样&#xff0c;B树的深度决定了MySQL在仅考虑使用索引的情况下的最坏查询性能。在SSD的帮助下&#xff0c;拥有一个比4层更深的B树应该是可以接受的。 那么下一个问题是&#xff1a;性能可能有多糟糕&#xff1f;在这里&#xff0c;我有意设…

elasticsearch中文分词使用以及疑问

最近用到elasticsearch作为知识库底层搜索引擎&#xff0c;开发反馈中文查询有问题&#xff0c;所以引用ik分词解决此问题。 一、安装 根据自己的版本找到github仓库下载&#xff0c;我此处使用为7.9.3版本 v7.9.3 Releases medcl/elasticsearch-analysis-ik GitHub 解压到…

git pull 和push讲解:016

pull 和push大致流程&#xff1a;(将远程仓库同步到本地仓库)>(在本地仓库修改并提交)>(推送修改内容到远程仓库) 1. 首先创建一个文件夹&#xff0c; 打开Git Bash终端&#xff0c; cd到这个文件夹内 2. 将(远程仓库)的克隆到这个文件夹内&#xff1a;git clone 远程仓库…

史上最难HelloWorld

文章目录 TomcatServlet创建一个项目引入依赖创建目录编写代码打包部署验证 优化一下打包和部署-Smart TomcatServlet常见的问题 Tomcat Tomcat就是一个HTTP服务器&#xff0c;HTTP协议是前后端交互的桥梁&#xff0c;前端就是浏览器&#xff0c;后端就是一个HTTP服务器&#…

设计模式之~访问者模式

简述&#xff1a; 访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式(Vistor Pattern)是一种将数据结构与数据操作分离的的设计模式。 结构图&#xff1a; 实例&#xff1a; 示例代码&#x…

Linux系统下C语言的编程技巧

Linux系统能够为人们提供更加安全实用的效果,保证计算机系统能够稳定的运行。利用Linux系统下首先要进行C语言的编程,掌握编程的技巧能够更好的发挥计算机的作用。如何掌握Linux系统下计算机C语言的编程技巧是计算机发展的关键要素。本文对Linux系统下计算机C语言的编程技巧进行…

【复习笔记】FreeRTOS(三)任务挂起和恢复

本文是FreeRTOS复习笔记的第三节&#xff0c;任务挂起和恢复&#xff0c;使用的开发板是stm32f407VET6&#xff0c;创建两个任务&#xff0c;task1负责闪烁LED&#xff0c;task2负责按键控制&#xff0c;当按键按下时控制任务挂起&#xff0c;按键再次按下恢复任务&#xff0c;…

【数据结构】经典排序法

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb; 直接插入排序&#x1f449;&#x1f3fb; 选择排序&…

微信支付(小程序)-java

微信支付开发者文档微信支付是腾讯公司的支付业务品牌&#xff0c;微信支付提供公众号支付、APP支付、扫码支付、刷卡支付等支付方式。微信支付结合微信公众账号&#xff0c;全面打通O2O生活消费领域&#xff0c;提供专业的互联网行业解决方案&#xff0c;微信支付支持微信红包…

访问github网络问题解决

查看wsl可用镜像列表时产生如下访问github的网络问题 C:\Users\jiangcheng> wsl --list --online 无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json”中提取列表分发。无法与服务器建立连接 Error code: Wsl/WININET_…

hive任务reduce步骤卡在99%原因及解决

我们在写sql的时候经常发现读取数据不多&#xff0c;但是代码运行时间异常长的情况&#xff0c;这通常是发生了数据倾斜现象。数据倾斜现象本质上是因为数据中的key分布不均匀&#xff0c;大量的数据集中到了一台或者几台机器上计算&#xff0c;这些数据的计算速度远远低于平均…

Vulkan Tutorial 9 模型加载Mipmaps

目录 28 加载模型 Sample mesh 加载顶点和索引 ​编辑 顶点去重 28 加载模型 我们将使用tinyobjloader库来从OBJ文件中加载顶点和面。它的速度很快&#xff0c;而且很容易集成&#xff0c;因为它是一个像stb_image一样的单文件库。将包含tiny_obj_loader.h的目录添加到Add…

ChatGPT国内镜像站

免费国内镜像推荐&#xff08;超稳定&#xff09; 下面为大家收集了目前国内最稳定流畅的ChatGPT镜像网站 目录 机器人 博弈ai 泰cool辣 道合顺 二狗问答 核桃 WOChat GPT中文站 TomChat 利用ChatGPTMindShow三分钟生成PPT ChatGPT国内镜像是啥 ChatGPT 镜像是指…

Xpdf 阅读器源码编译后查看文件中文乱码问题解决

经查阅&#xff0c;是由于缺少中文字体包&#xff1a; 第一步&#xff1a;下载所需要的字体包 下载https://dl.xpdfreader.com/xpdf-t1fonts.tar.gz 包含下载中文字体包&#xff08;非嵌入字体&#xff09; http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/gkai00mp…

pytorch-简单回归问题-手写数字识别

pytorch-简单回归问题-手写数字识别 线性回归添加噪声简单例子分类问题引入-手写数字识别数据集 训练推导手写数字识别1加载数据集编写网络训练网络计算正确率 线性回归添加噪声 使用均方差损失函数来衡量损失 简单例子 通过最小化损失函数&#xff0c;求解出参数w b 下图表示…

封装的函数停发/启动CAN报文,以及报文接收检测,高可用

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 📘前言 🍅 在测试过程中,我们可能需要可控的停/发某些报文,今天博主给…

chatgpt赋能python:Python主页面的SEO分析及优化建议

Python主页面的SEO分析及优化建议 Python是一种高级编程语言&#xff0c;广泛应用于人工智能、数据分析、Web开发等领域。Python官方网站是Python社区的一个重要门户&#xff0c;为全球学习Python的开发者提供了全面、权威、可靠的信息。在这篇文章中&#xff0c;我们将分析Py…

Text to image论文精读SeedSelect: 使用SeedSelect微调扩散模型It’s all about where you start

随着文本到图像扩散模型的发展&#xff0c;很多模型已经可以合成各种新的概念和场景。然而&#xff0c;它们仍然难以生成结构化、不常见的概念、组合图像。今年4月巴伊兰大学和OriginAI发表《It’s all about where you start: Text-to-image generation with seed selection》…

软件外包开发项目原型图工具

项目原型图工具有非常重要的作用&#xff0c;尤其是在APP项目开发中&#xff0c;对于整体需求的表达是必不可少的工具。相比于传统的文档需求&#xff0c;图形文字的表达可以更清楚的表达需求&#xff0c;让客户清楚的明白软件功能有哪些&#xff0c;最后的界面是怎样的&#x…