双指针问题解法集(一)

1.指针对撞问题(利用有序数组的单调性衍生)

1.1LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)​​​​​​

1.1.1题目解析

有序数组,找到和为price的两个元素,只需要一个解即可。

1.1.2算法原理

a.解法一:两层for循环暴力枚举,时间复杂度O(N^{2});空间复杂度O(1);

b:解法二:利用双指针对撞,left指向最左边元素,right指向最右边元素,利用单调性原理,如果他们的和大于price,那么left++,如果和小于price,那么right--,等于price直接return。时间复杂度O(N),空间复杂度O(1)

1.1.3代码实现

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

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

1.2.1题目解析:

给定一个数组nums,找出可以组成三角形三条边的三元组个数

1.2.2算法解析:

a.解法一:三层for循环,暴力枚举,时间复杂度O(N^3),空间复杂度O(1);

b.解法二:两小边之和大于第三边时就能确定三角形成立。因此我们可以先将数组排序,这样较大的数就在右边,较小的数就在左边。我们可以先固定一个三角形中最大边maxn,那么较小的两条边就在大边的左边寻找。定义left为最左边元素,right为最右边元素。  

如果left+right>maxn时,那么证明此时为三角形,同时因为left左边的数都比left大,那么left依次变为left左边时都可以成立,那么就可以计入right-left个三角形。之后right--,继续去寻找;

如果left+right<=maxn时。那么left就要++,去寻找更大的数。

当left==right时就停止,接下来就改变固定的大数,继续寻找。时间复杂度O(N*longN)+O(N^2),空间复杂度O(1);例[2,2,3,4]

1.2.3代码解析:

class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(),nums.end());int maxn = nums.size()-1;int ret = 0;while(maxn >= 2){int left = 0,right = maxn-1;while(right > left){if(nums[left] + nums[right] > nums[maxn]){ret+= right - left;right--;}else{left++;}}maxn--;}return ret;}
};

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

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

相关文章

根据提交的二维数据得到mysql建表和插入数据实用工具

根据提交的二维数据得到mysql建表和插入数据实用工具,这是重构版本(之前有过)。 会通过数据的长度&#xff0c;类型&#xff0c;是否数字&#xff0c;是否唯一等做判断&#xff0c;且每千条一个插入语句以优化性能。 <?php //整理与分享&#xff1a;yujianyue<1505859…

数据库连接池实现

目录 前提&#xff1a;如果我要操作多个表&#xff0c;那么就会产生冗余的JDBC步骤&#xff0c;另一个弊端就是每次都需要数据库连接对象&#xff08;Connection&#xff09;&#xff0c;获取效率低下&#xff0c;每次使用时都需要先进行连接 数据库连接池的特点&#xff1a; …

JavaEE初阶------网络编程续+传输层UDP协议介绍

文章目录 1.实现翻译服务器2.TCP的socket api使用3.初识网络编程3.1开发中常见的格式3.1.1行文本方式构造3.1.2xml格式表示3.1.3json处理格式3.1.4protobuffer格式 3.2传输层3.2.1UDP报文格式3.2.2校验和的说明3.2.3校验和的计算方法3.2.3.1CRC算法3.2.3.2MD5算法 1.实现翻译服…

python的数据结构列表方法及扩展(栈和队列)

python的数据结构 python的list方法 list.append() 添加一个元素到列表末尾。list,append(num)相当于a[len(a):] [num] a [1,2,3,4,5] a.append(6) print(a) a[len(a):] [7] print(a)list.extend() 添加指定列表的所有元素。list.extend(nums)相当于a a nums a [1,2,3]…

我与Linux的爱恋:基础IO 文件描述符重定向缓冲区

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 文件描述符文件描述符分配规则访问文件的本质 重定向原理缓冲区的理解 文件描述符 通过上述内容&#xff0c;我们知道使用 open 系统调用打开文件时&#xff0c;系…

Java每日刷题之二分算法

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 转化 通过题目时间复杂度为O(logN),我们就可以联想到二分算法&#xff0c;但是我们前面学到的算法&#xff0c;是查找出&#xff0c;有序数组里的值&#xff0c;并不是求其中的范围&a…

qt QBrush详解

1、概述 QBrush是Qt框架中的一个基本图形对象类&#xff0c;它主要用于定义图形的填充模式。QBrush可以用于填充如矩形、椭圆形、多边形等形状&#xff0c;也可以用于绘制背景等。通过QBrush&#xff0c;可以设置填充的颜色、样式&#xff08;如实心、渐变、纹理等&#xff09…

postman如何安装旧版本不升级(以9.31和11.10版本为例)

postman版本超过10.x&#xff08;包含10.x)&#xff0c;有个大的麻烦&#xff0c;就是需要登录账号&#xff0c;如果网络不佳&#xff08;其实是外网受限&#xff09;,那就很难受了 功能页面都进不去了&#xff01;而8.x /9.x等以下版本就不需要登录了。 比如9.31.30这个版本就…

线程函数和线程启动的几种不同形式

线程函数和线程启动的几种不同形式 在C中&#xff0c;线程函数和线程启动可以通过多种形式实现。以下是几种常见的形式&#xff0c;并附有相应的示例代码。 1. 使用函数指针启动线程 最基本的方式是使用函数指针来启动线程。 示例代码&#xff1a; #include <iostream&g…

Arm和高通闹翻在即,或影响骁龙 8 Elite

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; Arm向高通下达最后通牒&#xff0c;骁龙 8 Elite或受影响 其实对于小江这个不咋关注安卓圈的用户来说&#xff0c;高通和Arm大概就是秤不离砣&#xff0c;砣不离秤的关系。不过在看了今天的最新…

【学术精选】SCI期刊《Electronics》特刊“New Challenges in Remote Sensing Image Processing“

英文名称&#xff1a;New Challenges in Remote Sensing Image Processing 中文名称&#xff1a;"遥感图像处理的新挑战"特刊 期刊介绍 “New Challenges in Remote Sensing Image Processing”特刊隶属于《Electronics》期刊&#xff0c;聚焦遥感图像处理领域快速…

人机环境系统智能是东方天地人思想与西方科技思维的融合

西方科技思维常常受到还原主义的影响&#xff0c;这种思维方式通常强调将复杂系统拆解为更简单的部分进行分析&#xff08;比如物理的分子、原子、电子、夸克……&#xff0c;数理中的分解因式&#xff09;。以下是还原主义的一些特点&#xff1a; 分析方法&#xff1a;强调通过…

深度学习:梯度下降算法简介

梯度下降算法简介 梯度下降算法 我们思考这样一个问题&#xff0c;现在需要用一条直线来回归拟合这三个点&#xff0c;直线的方程是 y w ^ x b y \hat{w}x b yw^xb&#xff0c;我们假设斜率 w ^ \hat{w} w^是已知的&#xff0c;现在想要找到一个最好的截距 b b b。 一条…

瑞芯微RK3566/RK3568 Android11下该如何默认屏蔽导航栏/状态栏?看这篇文章就懂了

本文介绍瑞芯微RK3566/RK3568在Android11系统下&#xff0c;默认屏蔽导航栏/状态栏方法&#xff0c;使用触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;Laval官方社区主荐&#xff0c;已适配全新OpenHarmony5.0 R…

Python | Leetcode Python题解之第519题随机翻转矩阵

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, m: int, n: int):self.m mself.n nself.total m * nself.map {}def flip(self) -> List[int]:x random.randint(0, self.total - 1)self.total - 1# 查找位置 x 对应的映射idx self.map.get(x,…

从0学习React(6)

这两天在写IT资产管理的时候&#xff0c;对于前端&#xff0c;我一直没有任何头绪&#xff0c;不知道怎么写。因为我之前并没有学习过前端方面的知识&#xff0c;我学的都是后端。我在写后端接口的时候&#xff0c;我是自己有一些基础的&#xff0c;然后我又参照着模仿着一些很…

单个相机矫正畸变

1、通过标定助手获取到内参外参&#xff0c;外参在此无效&#xff0c;只用到了内参 2、然后通过halcon算子进行矫正 参考&#xff1a;超人视觉

乘云而上,OceanBase再越山峰

一座山峰都是一个挑战&#xff0c;每一次攀登都是一次超越。 商业数据库时代&#xff0c;面对国外数据库巨头这座大山&#xff0c;实现市场突破一直都是中国数据库产业多年夙愿&#xff0c;而OceanBase在金融核心系统等领域的攻坚克难&#xff0c;为产业突破交出一副令人信服的…

laravel: Breeze 和 Blade, 登录 注册等

composer require laravel/breeze --dev php artisan breeze:install php artisan migrate npm install npm run build php artisan route:clear http://laravel-dev.cn/ http://laravel-dev.cn/register http://laravel-dev.cn/login

VS+Qt解决提升控件后,包含头文件格式不对问题处理

一、前言 VSQt 提升控件后&#xff0c;在uic目录下会生成ui相关的初始化文件&#xff0c;对于提升的控件头文件包含的格式为#include<> 而非 #include “ ” 导致无法找到头文件。如果手动修改为 #include “ ”相当麻烦&#xff0c;甚至每次编译都要修改一遍&#xff0c…