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

算法题打卡力扣第167题:两数之和——输入有序数组(mid)

文章目录

    • 题目描述
    • 解法一:暴力解
    • 解法二:双指针法

题目描述

在这里插入图片描述
提示:

2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案

解法一:暴力解

两个for循环
代码

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int n = numbers.size();int index1,index2;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(numbers[i]+numbers[j]==target){index1= i+1;index2 = j+1;break;}   }}return {index1,index2};}
};

执行如下:
超出时间限制了
在这里插入图片描述

复杂度分析:
时间复杂度分析:O(n^2),对于这道题来说太慢了,没有利用到数组的有序性
空间复杂度分析:O(1)

解法二:双指针法

算法思想:

因为数组是有序的,我们可以使用两个指针,一个从头开始,一个从尾开始,相向而行。

思路详解:
初始化两个指针:left 指向数组开头(索引 0),right 指向数组末尾(索引 n-1)。
进入循环,条件是 left < right。
计算两个指针指向的数字之和 sum = numbers[left] + numbers[right]。
进行判断:
如果 sum == target:太棒了,我们找到了答案!直接 return {left + 1, right + 1}。
如果 sum < target:说明当前的和太小了。为了让和变大,我们需要一个更大的数。由于数组是升序的,我们应该将左指针 left向右移动一位 (left++),去尝试一个更大的数。
如果 sum > target:说明当前的和太大了。为了让和变小,我们需要一个更小的数。我们应该将右指针 right向左移动一位 (right–),去尝试一个更小的数。
由于题目保证有解,这个循环一定会在 left 与 right 相遇前找到答案。
代码

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

执行结果
在这里插入图片描述
复杂度分析:
时间复杂度分析:O(n)
空间复杂度分析:O(1)

http://www.xdnf.cn/news/18893.html

相关文章:

  • AMH和cyberpanel等管理软件,哪个里面可以部署AI软件?
  • week4-[二维数组]平面上的点
  • 文件读取结束的判定方法:正确使用feof函数避免文件读取错误
  • 代码随想录算法训练营30天 | ​​01背包理论基础、416. 分割等和子集
  • Pandas 高效数据处理:apply、向量化与分组
  • Android用Coil 3检查媒体资源是否有效,Kotlin
  • LeetCode 面试经典 150_双指针_验证回文串(25_125_C++_简单)(双指针)
  • 基于多通道同步分析的智能听诊系统应用程序
  • k8s数据存储
  • k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)
  • Rust Async 异步编程(六):Pin 和 Unpin
  • Python实现点云投影到直线、平面、柱面和球面
  • ComfyUI AI一键换装工作流无私分享
  • 《分布式系统跨服务数据一致性Bug深度复盘:从现象到本质的排查与破局》
  • 从“数据孤岛”到“业财融合”,外贸订单管理ERP重构一体化逻辑
  • 电气工程及其自动化的课程笔记
  • 接口自动化测试:测试用例也能自动生成
  • Vue3 + Golang Gin 实现客服实时聊天系统(WebSocket + Socket.IO 详解)
  • 【工具安装使用-Jetson】Jetson Orin Nano 刷机和踩坑总结
  • 从人工巡检到AI预警:智慧工地如何用技术重构施工安全体系
  • Flink 状态 RocksDBListState(写入时的Merge优化)
  • 《C++哈希表:高效数据存储与检索的核心技术》
  • 正则表达式 —— \s*
  • C# 相机内存复用(减少图像采集耗时)以及行数复用
  • HTB赛季8靶场 - Previous
  • 无障碍辅助模块|Highcharts引领可访问数据可视化的交流
  • 《李沐读论文》系列笔记:论文读写与研究方法【更新中】
  • 【每天一个知识点】大模型训推一体机
  • linux的conda配置与应用阶段的简单指令备注
  • Hadoop(四)