相向双指针

news/2024/10/5 21:49:21/文章来源:https://www.cnblogs.com/pangyou3s/p/18288207

167. 两数之和Ⅱ-输入有序数组

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {vector<int> ans;int n = numbers.size();int l = 0, r = n - 1;while (l < r) {if ((numbers[l] + numbers[r]) == target) {ans.push_back(l+1), ans.push_back(r+1);break;} else if ((numbers[l] + numbers[r]) < target) {l++;} else r--;}return ans;}
};

15.三数之和

本题可以看作两数之和的升级版,即固定一个数不动,看另外两个数之和是否等于这个数的相反数。时间复杂度为 \(O(n^2).\) (枚举第一个数为 \(O(n)\),双指针为 \(O(n)\))。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end());//先排序,方便尺取vector<vector<int>> ans;int n = nums.size();for (int i = 0; i < n - 2; i++) {int x = nums[i];if (i && x == nums[i - 1]) continue;//跳过重复数字(当前nums[i]已经被使用过)if (x + nums[i + 1] + nums[i + 2] > 0) break;//当x与其后的两个数之和大于0,说明这组无解(后面的数变大或x变大都不可能再等于0)if (x + nums[n - 2] + nums[n - 1] < 0) continue;//如果x与最后面的两个数之和小于0,说明后面两个数变小也仍然小于0,只有增大x。int l = i + 1, r = n - 1;while (l < r) {int sum = x + nums[l] + nums[r];if (sum > 0) r--;else if (sum < 0) l++;//尺取else {ans.push_back({x, nums[l], nums[r]});l++;//当前的l和r所指向的数下回不能再使用。while (l < r && nums[l] == nums[l - 1]) l++;r--;while (l < r && nums[r] == nums[r + 1]) r--;}}}return ans;}
};

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

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

相关文章

关于电源的基础知识

基础知识很多时候,都没有直接的作用。但是不积跬步无以至千里,不积小流无以成江海。接下来就用一页笔记,简单说明一下不理想源的输出阻抗。在一个电路系统中,前级和后级的连接,大多需要计算输入输出阻抗的。

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361)\(A\) Insert \(AC\)循环结构。点击查看代码 int a[200]; int main() {int n,k,x,i;cin>>n>>k>>x;for(i=1;i<=n;i++){cin>>a[i];cout<<a[i]<<" ";i…

浅谈进程隐藏技术

在之前几篇文章已经学习了解了几种钩取的方法,这篇文章就利用钩取方式完成进程隐藏的效果。在实现进程隐藏时,首先需要明确遍历进程的方法。前言 在之前几篇文章已经学习了解了几种钩取的方法 ● 浅谈调试模式钩取 ● 浅谈热补丁 ● 浅谈内联钩取原理与实现 ● 导入地址表钩取…

什么是新质生产力

什么是新质生产力

好消息!数据库管理神器 Navicat 推出免费精简版:Navicat Premium Lite

前言 好消息,前不久Navicat推出了免费精简版的数据库管理工具Navicat Premium Lite,可用于商业和非商业目的,我们再也不需要付费、找破解版或者找其他免费平替工具了,有需要的同学可以马上下载使用起来。 工具官方介绍 Navicat Premium Lite 是 Navicat 的精简版,它包含了…

读人工智能全传05专家系统

读人工智能全传05专家系统1. 知识就是力量 1.1. 人工智能领域此前存在的问题是过度关注搜索和解决问题这种通用法则 1.2. “弱”方法缺少一个关键的要素,而这一要素才是在所有智能行为中起决定性作用的组成部分:知识 1.3. 一种基于知识的人工智能系统:专家系统开始出现,它能…

副本集要点

oplog 中的每个操作都是幂等的。也就是说,无论对目标数据集应用一次还是多次,oplog 操作都会产生相同的结果。 Oplog大小当您第一次启动副本集成员时,如果您未指定 oplog 大小,MongoDB 将创建默认大小的 oplog。默认 oplog 大小取决于存储引擎: 存储引擎默认 Oplog 大小Wi…

副本集

MongoDB 中的副本集是一组mongod提供冗余和高可用性的进程。副本集的成员包括: 主服务器接收所有写操作。 主节点是副本集中唯一接收写入操作的成员。MongoDB 在主节点上应用写入操作,然后将操作记录在主节点的oplog上。辅助成员复制此日志并将操作应用于其数据集。副本集的所…

06.函数

Go 语言中的函数是代码组织和复用的基础,函数的定义和调用非常简单明了。下面是 Go 语言中函数的基础语法和一些关键概念: 函数的定义 在 Go 语言中,函数的定义包括函数名、参数列表、返回值类型和函数体。语法格式如下:func 函数名(参数列表) 返回值类型 {函数体 } 示例 下…

第一周学习总结

暑假第一周,经过短暂的调整,我进入到了Java语言的学习中。通过这一周的学习,在《疯狂Java讲义》与B站黑马程序员课程的帮助下,我初步了解了Java这门编程语言。以下是我对这周学习的总结: 1.学习使用CMD 学会了使用Win+R输入cmd打开CMD窗口,学习了一些常见CMD指令(如dir,…

Aide插件

aide/docs/configuration/README_CN.md at master nicepkg/aide GitHub VSCode代码阅读神器正式发布_哔哩哔哩_bilibili 结合chatgpt实现多种功能,包含代码一键生成逐行翻译、多种编程语言之间的转换等功能,对于接手大型工程的朋友们比较友善。 在安装、运行的过程中自己遇…

如何返回“无法访问此网站,网页可能暂时无法连接,或者它已经永久性地移动到了新网址”

测试网址:https://apd-vlive.apdcdn.tc.qq.com/vhqts.tc.qq.com/AH06mhzdlI9B9pSNWNcCQ3qMPITV0Kvp7M9y38FV4acs/B_tRCdt2L6hl1ezG-aht1_p5_cq9aDE5woqbhlSZqo2k-426BaS8_TYPecOQIueTdj/svp_50112/KVzxIc_QsMTArbayBuac_YlujjBVGNK2tuYZLHLdMFhy2_PHwGTGHd8PTpwBeJf4V8Ol2Ejdk…