当前位置: 首页 > news >正文

leetcode 刷题 - 有效三角形个数 - 长度最小的子数组 - 无重复字符的最长子串

l611. 有效三角形的个数 - 力扣(LeetCode)

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

示例 1:输入: nums = [2,2,3,4]
输出: 3
解释:有效的组合是: 
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3示例 2:输入: nums = [4,2,3,4]
输出: 4

有上述输出我们发现,就算是重复的,也是需要计算在其中的。

如果简单按照 任意两边之和大于第三边的话,我们需要判断三次,其实还有更好的办法:

如果我们知道三条边的大小顺序,那么只需要判断 较小的两个数之和 大于第三遍即可。只需判断一次。

比如 a <= b <= c ,那么只需要判断 a+b > c 即可。因为 我们只是漏判断了  a + c > b 和 b + c > a 这两种情况,这两种情况都是c 加上一个数,因为 c 已经是最大的数了,如果 a+b > c 都满足的话,上述两种也都满足。如果 a+b > c 不满足,那么这三个数也就不能构成 三角形。

所以,我们要先对整个数组进行排序。

解法一:暴力枚举所以的三数组合。

for(int i = 0 ;i < n;i++)
{for(int j = i+1 ; j < n ; j++){for(int k = j + 1; k < n; k++)// 判断是否是 三角形check(i , j , k);}}

上述只是伪代码,只是表示一种思路,但是你也看出来了,这个时间复杂度非常高,不推荐。

解法二:利用单调性,是使用双指针算法来实现。

排好序的情况下:

首先 ,我们先固定最大的数,也就是把 C 的值给固定了。然后来找(枚举) 其余两个 较小的数:

 但是不能胡乱枚举,假设现在用 left 和 right 两个指针来枚举 其余两个 较小的数。

我们找到除了 C 之外的 最小的数,和最大的数:

 那么此时,left + right 和 C 有两种情况,一种是 left + right > C 另一种是 left + right <= C。

第一种情况:那么 left 和 right 中间的数 ,都是要大于 left 的,那么left 都满足了,中间的数也都会满足。我们只用判断第一种情况,那么中间的情况都判断了。而且,中间的 情况的个数刚好就是 right - left

在上述情况之下,因为 此时 的right 已经和 中间的所以数都枚举过了,所以此时 的 rigth 指向的 数也就没用了,不用枚举了。

 此时只需要把 right-- ,去下一个区间当中判断。

如果是第二种情况:此时 left + right 已经小于 C 了,那么此时 left 和 right 中间的数,一定比 right 要小,那么所枚举出的结果一定要比 C小,所以中间的 结果都不满足了。

在上述情况,left 指向的 数据也就没有用了,因为 中间的数据也都枚举完毕了。所以,就不用再去枚举了。

 此时只需要 left++,去下一个区间当中判断就行。

left 和 right相遇之时,10 这个数字的所有枚举结果就都枚举出来了。

但是上述过程只是 固定了10 这个数字之后的结果,所以,此时还需要往前去遍历,此时的区间就是在上述例子的 2 - 9 这个区间当中去判断了,10 就不用管了,因为 10 的情况已经全部判断完了。

完整代码:

 int triangleNumber(vector<int>& nums) {sort(nums.begin(), nums.end());int left, right, end = nums.size() - 1;int count = 0;while(end > 1){left = 0;right = end - 1;while(left < right){if(nums[left] + nums[right] > nums[end]){count += right - left;right--;}else{left++;}}end--;}return count;}


l209. 长度最小的子数组 - 力扣(LeetCode)

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0


3. 无重复字符的最长子串 - 力扣(LeetCode)

 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

暴力解法:

我们先要找出 一个字符串当中的所有子串,其实就是那一个 字符做开头,后序的一个字符一个字符的和之前的字符就链接,就可以构成一个子串,当链接到最后一个字符之时,说以这个字符开头的 子串已经枚举完毕了。此时就找 下一个字符 作为开头来在想上述一样来链接即可。

当然,在链接过程当中,我们要记录这些链接进子串的每一个字符,如果在后序链接过程当中,遇到了这个字符,就不能再往后链接了。

 那么,要判断出 每一个满足条件的子串,就把寻找一次子串 保存一个子串当中的字符,把这些字符保存到 hash 表当中,如果后续在链接子串的过程当中 链接到了 hash 当中有字符,说明这个字符已经不满足条件了。(每一个字符串 判断自己的 hash 表)

固定 left,right 往后走,先判断 字符是否在 hash 当中,再往后移动。如果在hash 当中存在,left 和 right (包括 left 不包括 right)中间就是 当前遍历最大子串。

 解法二:滑动窗口

在上述使用 双指针来 判断的过程当中,我们发现 中间有些情况是不用来查找的:

如上述,已经找到 deabc 这个子串了,然后此时 left++,right = left,继续循环:

发现他还是在 第一次 的 a 这个位置停下来。

所以,其实在第一次 循环查找之后, left 其实可以跳过中间  a 这个字符,来到 b 这个字符进行下一次查找。

 而且,在上述提过了重复字符之后, right 没必要再跳回来 和 left 相等 地方重新寻找。因为 此时在 上述图当中 left 和 right 中间子串已经没有再 重复的字符了。

而什么时候更新哈希表,就是当 left++ 一次就是 之前left 指向的 字符出哈希表。

 最后是要计算结果,在每一次 计算出子串 之时,就可以计算出结果。

 left 和 right 指针在上述情况下都是一直往后走不会退的。

class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128] = {0}; // 用数组来模拟 hash 表,0表示没有,1 表示没有int left = 0, right = 0, n = s.size();int ret = 0;while(right < n) // right 到最后时,left 和 right 之间就是最后一个子串{hash[s[right]]++; // 把 right指向的字符,插入到 hash 当中while(hash[s[right]] > 1) //判断right指向字符是否在 hash 当中存在hash[s[left++]]--; // left字符出hashret = max( ret, right - left + 1);right++; // 向后向hash入字符}return ret;}
};

相关文章:

leetcode 刷题 - 有效三角形个数 - 长度最小的子数组 - 无重复字符的最长子串

l611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1:输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3示…...

如何更好的使用Copilot

Copilot从诞生到现在过去了挺长时间了&#xff0c;大家对Copilot的评价算是褒贬不一吧。有些人觉得Copilot高效且神奇&#xff0c;可以对自己的工作大大提效&#xff1b;有些觉得也就那样&#xff0c;为什么要花那么多钱做这个事情&#xff0c;钱它不香吗&#xff1f; 从最开始…...

C++ Qt 学习(五):Qt Web 编程

1. Chrome 技术介绍 大多数 web 技术都是基于 chrome&#xff0c;例如 CEF、QCefView 以及 QWebEngineView&#xff0c;这些都是在 native 界面里用来显示 html 网页&#xff0c;并且可以与 web 交互 例如常见的登录窗口、优酷的视频区域、WPS 的稻壳商城等&#xff0c;这些都…...

基于arm-gcc 工具链开发mcu程序时,怎么便捷查看内存映像

目录 一、背景 arm-none-eabi-size 二、脚本实现 2.1. 源码2.2. 效果呈现 三、实现说明 3.1 基本思路3.2 涉及到的shell 相关知识 3.2.1 sed 实现只打印第二行3.2.2 cut 截取某一行数据的第n个字段3.2.3 使用bc 计算器&#xff0c;实现浮点运算 一、背景 arm-gcc 工具链…...

亚马逊云科技Zero ETL集成全面可用,可运行近乎实时的分析和机器学习

亚马逊云科技数据库、数据分析和机器学习全球副总裁Swami Sivasubramanian曾指出&#xff1a;“数据是应用、流程和商业决策的核心。”如今&#xff0c;客户常用的数据传输模式是建立从Amazon Aurora到Amazon Redshift的数据管道。这些解决方案能够帮助客户获得新的见解&#x…...

Java 设计模式——访问者模式

目录 1.概述2.结构3.案例实现3.1.抽象访问者类3.2.抽象元素类3.3.具体元素类3.4.具体访问者类3.5.对象结构类3.6.测试 4.优缺点5.使用场景6.扩展6.1.分派6.2.动态分配6.3.静态分配6.4.双分派 1.概述 访问者模式 (Visitor Pattern) 是一种行为型设计模式&#xff0c;它用于将数…...

Mysql联合查询

Mysql联合查询 T1表结构&#xff08;用户名,密码&#xff09; useridusernamepassword1jackpwd12owenpwd2 T2表结构&#xff08;用户名,密码&#xff09; useridjifendengji12033506 第一&#xff1a;内联&#xff08;inner join&#xff09; 如果想把用户信息、积分、等…...

响应式婴幼儿早教启蒙网站模板源码

模板信息&#xff1a; 模板编号&#xff1a;6830 模板编码&#xff1a;UTF8 模板颜色&#xff1a;红色 模板分类&#xff1a;学校、教育、培训、科研 适合行业&#xff1a;培训机构类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xf…...

ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程

播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;…...

react 修改less文件后保存,内存溢出,项目崩溃问题解决

一、完整报错 一个很老的react项目&#xff0c;因为没有package-lock.json版本锁&#xff0c;导致拉下来的时候&#xff0c;安装的依赖版本冲突&#xff0c;好不容易启动起来&#xff0c;修改less文件后只要一保存&#xff0c;项目就会崩溃&#xff0c;需要重启&#xff0c;报…...

Lib文件和netlist的关系,DDC文件和netlist的区别

今天来说一说两个基础的概念&#xff1a; 1&#xff1a;综合用的Lib文件和netlist网表的关系 在数字IC设计中&#xff0c;Lib和网表都是非常重要的文件&#xff0c;但它们的作用和用途有很大的区别。 Lib文件&#xff0c;也称为库文件&#xff0c;主要包含单元级的信息&…...

万宾科技智能井盖,实现对井盖的监测

随着人工智能和物联网技术的不断变化&#xff0c;各种适用于市政府提高管理能力和公共服务水平的高科技产品不断更新。在道路基础设施建设过程中&#xff0c;智能井盖传感器的出现时刻保护着城市地下生命线&#xff0c;而且可以对地下水道井盖进行实时的监测并完成数据上传等工…...

使用Python从零实现多分类SVM

前言 本文将首先简要概述支持向量机及其训练和推理方程&#xff0c;然后将其转换为代码以开发支持向量机模型。之后然后将其扩展成多分类的场景&#xff0c;并通过使用Sci-kit Learn测试我们的模型来结束。 SVM概述 支持向量机的目标是拟合获得最大边缘的超平面(两个类中最近…...

WPF ToggleButton 主题切换动画按钮

WPF ToggleButton 主题切换动画按钮 仿造最近看到的html中的一个效果&#xff0c;大致思路是文章这样&#xff0c;感觉还可以再雕琢一下。 代码如下 XAML: <UserControl x:Class"WPFSwitch.AnimationSwitch"xmlns"http://schemas.microsoft.com/winfx/200…...

centerOS下docker 搭建IotDB集群

一、准备3台机器&#xff0c;IP地址依次为IP1&#xff0c;IP2&#xff0c;IP3&#xff0c;找一个目录下建立文件夹如下&#xff1a; ./data/confignode ./logs/confignode ./data/datanode ./logs/datanode二、在当前目录下建立docker-compose.yml文件&#xff0c;3台都要 1、…...

Vue3-Composition-API-学习笔记

01.Setup函数的体验 App.vue <template><div><h2>当前计数&#xff1a;{{ counter }}</h2><button click"increment">1</button><button click"decrement">-1</button></div> </template>&…...

NSS [HUBUCTF 2022 新生赛]checkin

NSS [HUBUCTF 2022 新生赛]checkin 判断条件是if ($data_unserialize[username]$username&&$data_unserialize[password]$password)&#xff0c;满足则给我们flag。正常思路来说&#xff0c;我们要使序列化传入的username和password等于代码中的两个同名变量&#xff0…...

免费小程序HTTPS证书

随着互联网的快速发展&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;在小程序的开发和使用过程中&#xff0c;安全问题一直是开发者们关注的重点。其中&#xff0c;HTTPS 证书是保障小程序安全的重要工具之一。在这方面&#xff0c;免费的小程序…...

Linux arm64异常简介和系统调用过程

文章目录 一、异常简介1.1 Exception levels1.2 异常类型 二、系统调用简介2.1 SVC指令2.2 VBAR2.3 系统调用保存现场2.4 系统调用返回 三、Linux 内核分析参考资料 一、异常简介 在ARM64体系架构中&#xff0c;异常是处理器在执行指令时可能遇到的不寻常情况或事件。这些异常…...

我遇到的最蠢的bug,竟然是因为这个原因……

bug的背景 我是一个Python开发者&#xff0c;我最近在做一个数据分析的项目&#xff0c;需要用到pandas库&#xff0c;来处理和分析一些表格数据我的功能需求是&#xff0c;根据用户输入的一些条件&#xff0c;从一个大的数据表中筛选出符合条件的数据&#xff0c;并生成一个新…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...