优选算法——双指针补充

五、leetcode611.有效三角形的个数

题目分析:

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

算法原理:

应用三角形任意量两边之和大于第三边;

解决方案:利用单调性解决;

​ 1.先固定最大的数;

​ 2.在最大的数的左边区间,使用双指针算法,快速统计出符合要求的三元组个数;

代码实现:

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

六、剑指offer57.和为s的两个数字

题目分析:

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。

算法原理:

​ 解决方法:利用单调性使用双指针解决问题;

代码实现:

vector<int> twoSum(vector<int>& price, int target) {vector<int> v;int left = 0;int right = price.size() - 1;while (left < right) {if (price[left] + price[right] < target) {left++;} else if (price[left] + price[right] > target) {right--;} else {v.push_back(price[left]);v.push_back(price[right]);break;}}return v;
}

七、leetcode15.三数之和

题目分析:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

算法原理:

​ 解法一:排序+暴力枚举+set去重;

​ 解法二:排序+双指针;

​ 1.排序;

​ 2.固定一个数a;

​ 3.剩余的数中使用双指针使得两个数之和等于-a;

​ 4.指针移动的过程中要跳过重复元素,包括遍历所有固定的数的过程当中;

​ 5.找到一种结果之后不要停下,继续向后遍历;

​ 6.还需要避免越界访问

代码实现:

vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end()); // 降序排序vector<vector<int>> vv;for (int i = 0; i < nums.size();) {if (nums[i] > 0) {break;}int left = i + 1;int right = nums.size() - 1;int target = -nums[i];while (left < right) {if (nums[left] + nums[right] < target) {left++;} else if (nums[left] + nums[right] > target) {right--;} else {vv.push_back({nums[i], nums[left], nums[right]});left++;right--;while (left < right && nums[left - 1] == nums[left]) {left++;}while (left < right && nums[right + 1] == nums[right]) {right--;}}}i++;while (i<nums.size()&&nums[i-1] == nums[i]) {i++;}}return vv;
}

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

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

相关文章

蓝桥杯国赛每日一题:日志统计(双指针)

题目描述&#xff1a; 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志&#xff0c;日志共有 N行。 其中每一行的格式是&#xff1a; ts id 表示在 ts时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长…

5.13学习日志

Pytorch 神经网络基础 1.模型构造 1》层和块 块可以描述单个层&#xff0c;由多个层组成的组件或者模型本身 块由类表示&#xff0c;类的任何子类都必须定义一个将其输入转换为输出的前向传播函数。为了计算梯度&#xff0c;块必须具有反向传播函数 自定义块&#xff1a; …

把现有的 Jenkins 容器推送到一个新的镜像标签,并且重新启动新的容器

要把现有的 Jenkins 容器推送到一个新的镜像标签&#xff0c;并且重新启动新的容器&#xff0c;你可以按照以下步骤操作&#xff1a; 停止当前正在运行的 Jenkins 容器&#xff08;如果你不想在操作时中断服务&#xff0c;可以跳过此步骤&#xff0c;直接进行下一步&#xff09…

VM 系列——SEED-X——论文解读

一、概述 1、是什么 是一个多模态大模型,论文全称《SEED-X: Multimodal Models with Unified Multi-granularity Comprehension and Generation》,不同于之前的图像文本大模型,主要面向图像问答理解。通过动态分辨率图像编码来处理任意尺寸和宽高比的图像,其作为一个统…

代码大师的工具箱:现代软件开发利器

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

申请免费的Let‘s Encrypt 通配符 HTTPS 证书

参考 https://www.cnblogs.com/wzlinux/p/11188454.html 检测工具 https://www.ssleye.com/ssltool/cer_check.html 申请步骤 安装工具包 curl -o /etc/yum.repos.d/epel-7.repo https://mirrors.aliyun.com/repo/epel-7.repo yum install -y certbot## certbot certonly…

【C++】-QT网络编程-【http】-007

1 【http】请求 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> class QNetworkAccessManager;//前向引用声明namespace Ui { class MyWidget; }class MyWidget : public QWidget {Q_OBJECTpublic:explicit MyWidget(QWidget *parent 0);~MyWidget();privat…

SQLZOO:Self join

数据表&#xff1a;stops-route stops: id,name route: num,company,pos,stop Q1 How many stops are in the database. SELECT COUNT(id) FROM stops Q2 Find the id value for the stop Craiglockhart SELECT id FROM stops WHERE nameCraiglockhart Q3 Give the i…

Ubuntu 超级终端Terminator常用使用技巧

Ubuntu 超级终端Terminator常用使用技巧 Terminator 是一款功能强大的终端模拟器&#xff0c;它特别适合于需要同时管理多个终端会话的用户。以下是如何在 Ubuntu 上使用 Terminator 的详细指南&#xff1a; 安装 Terminator 如果你的系统尚未安装 Terminator&#xff0c;你…

anaconda 环境配置

官方网站下载地址&#xff1a; https://www.anaconda.com/download/ 国内清华镜像下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 配置国内环境: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ …

人工智能生成图像的兴起:区分事实与虚构

人工智能生成图像的兴起&#xff1a;区分事实与虚构 概述 在人工智能 (AI) 已融入我们日常生活的时代&#xff0c;人工智能生成图像的快速发展引发了人们对数字内容真实性的担忧。最近&#xff0c;人工智能生成的图像甚至欺骗了最敏锐的眼睛&#xff0c;这引发了人们对批判性…

什么是抽样调查

抽样调查是政府统计工作和市场调查中普遍采用的方法&#xff0c;我国《统计法》中明确规定&#xff1a;搜集、整理统计资料&#xff0c;应当以周期性普查为基础&#xff0c;以经常性抽样调查为主体&#xff0c;综合运用全面调查、重点调查等方法&#xff0c;并充分利用行政记录…

黑盒测试中的边界值分析

黑盒测试是一种基于需求和规格的测试方法&#xff0c;它主要关注软件系统输出的正确性和完整性&#xff0c;而不考虑内部代码的实现方式。在黑盒测试中&#xff0c;边界值分析是一种重要的测试技术&#xff0c;它可以帮助测试人员有效地发现输入和输出的问题。本文将从什么是边…

探索未知:风靡硅谷开发者的 Unstructured Data Meetup 即将登陆中国

“最硅谷”的 Unstructured Data Meetup 即将来袭&#xff01; 众所周知&#xff0c;AI 三要素包括&#xff1a;算力、算法和数据。数据的价值愈发凸显&#xff0c;而其中非结构化数据更是备受关注。IDC 预测&#xff0c;到 2025 年&#xff0c;全球数据总量中将有超过 80% 的数…

【面经】Linux

一、高频 1、Linux常见的指令 路径/目录类 cd, mkdir, rmdir, pwd &#xff0c;ls等重要指令&#xff1b;rmdir 仅能删除空目录&#xff0c;要删除非空目录需使用“ rm -r ”指令&#xff1b;文件类 创建&#xff1a;mkdir文件夹&#xff0c;touch文件移动mv复制cp修改名字mv…

基于SSM的宠物领养系统的设计与实现

摘要 在当前社会&#xff0c;随着人们生活水平的提高&#xff0c;越来越多的家庭和个人开始养宠物。然而&#xff0c;由于各种原因&#xff0c;一些宠物被遗弃或需要救助&#xff0c;同时也有许多潜在的宠物领养者希望通过正规途径领养宠物。本次设计为宠物救助组织、寻找新家…

蓝桥杯2024【第十五届省赛】Python B (78分题解)

第三年蓝球杯&#xff0c;感觉题目比往年简单多了。题量合适够我这种菜鸟解答... ... 大概可能有45分&#xff0c;希望进省一大三最后i一次机会了55555 进省一了耶耶耶 试题 A: 穿越时空之门&#xff08;满分&#xff09; 本题总分&#xff1a;5 分 【问题描述】 随着 202…

【经验】mysql冷热数据分离

使用mysql存储时&#xff0c;为了提升数据的查询效率&#xff0c;降低磁盘存储压力等&#xff0c;我们常常使用"冷热数据分离"分离的方案。即&#xff0c;将数据从所谓的“热表”&#xff08;即经常有写入和查询操作的活跃表&#xff09;迁移到“冷表”&#xff08;用…

Django——中间件

Django——中间件 中间件可以介入 Django 的请求和响应的处理过程&#xff0c;修改 Django 的响应数据。中间件的设计为程序开发者提供了一种无侵入式的开发方式&#xff0c;增强 Django 框架的健壮性。 中间件可以在 Django 处理视图的不同阶段的干预。 Django 框架中原先内…

Python深度学习基于Tensorflow(7)视觉处理基础

文章目录 视觉基础图像基础卷积层&#xff1a;图像的中全连接层的优化卷积核tf.keras中的卷积函数池化层 现代经典网络DenseNet 数据增强 图像的本质是一个矩阵&#xff0c; 矩阵中的一个点就是一个像素&#xff0c;如果像素大小为 1000 1000 1000 \times 1000 10001000&…