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

LeetCode算法学习之两数之和 II - 输入有序数组

完整代码实现

class Solution {public int[] twoSum(int[] numbers, int target) {//暴力解法int[] result = new int[2];for(int first = 0;first<numbers.length;first++){for(int second = first+1;second<numbers.length;second++){if(numbers[first] + numbers[second] == target){result[0] = first+1;result[1] = second+1;return result;}// 提前终止内层循环(利用数组有序的特性)if(numbers[first] + numbers[second] > target) {break;}}}return result;}
}
class Solution {public int[] twoSum(int[] numbers, int target) {//头尾指针法int left = 0;int right = numbers.length - 1;while(left < right){if(numbers[left] + numbers[right] == target){return new int[]{left+1,right+1};}else if(numbers[left] + numbers[right] < target){left++;}else{right--;}}return new int[]{-1,-1};}
}

解题思路:

1 暴力解法(遍历数组中所有的两数之和与目标值进行比较,如果相同存入结果数组,)

注意点:提前终止内层循环 

if(numbers[first] + numbers[second] > target) {
break;
}  如果numbers[first] + numbers[second] > target  说明之后的数都要大于目标值,可以直接终止内循环

2 头尾指针法:

初始化指针:
left 指向数组头部(最小元素)。
right 指向数组尾部(最大元素)。
循环条件:
当 left < right 时,持续搜索。
比较和调整:
计算当前和 sum = numbers[left] + numbers[right]。
如果 sum == target,直接返回结果。
如果 sum < target,说明需要更大的数,因此 left 右移(left++)。
如果 sum > target,说明需要更小的数,因此 right 左移(right--)。
算法正确性
有序数组的利用:
数组升序排列保证了 left 右移会增大和,right 左移会减小和。
无遗漏性:
每次移动至少排除一个不可能的解,确保不会错过正确答案。
复杂度分析

 时间复杂度:O(n),最多遍历整个数组一次。
空间复杂度:O(1),仅使用常数级别的额外空间。
. 边界处理
输入保证:题目保证存在唯一解,因此无需处理无解情况。
索引转换:返回的索引从 1 开始,因此结果需要 +1。

http://www.dtcms.com/a/569399.html

相关文章:

  • 网站建设对企业很重要网站建设计划时间节点
  • 旅游景点的数据分析系统|基于python的旅游景点的数据分析系统设计与实现(源码+数据库+文档)
  • vue3 实现echarts 3D 地图
  • CRM客户管理系统定制开发:如何精准满足企业需求并提升效率?
  • JT转换为3DXML的技术指南及迪威模型网在线转换推荐
  • 乐清网站建设服务软件ui设计怎么做网站
  • H265/AV1/H266 帧间搜索对比
  • DNS 劫持分析和修复
  • 网站建设微信运营公司服务器搭建网站打不开
  • H265 vs av1 vs H266 变换编码差异
  • 17素材网站广西建设职业技术学院官网
  • Spring Boot3零基础教程,Reactive-Stream 规范核心接口,笔记103
  • 第三篇:C++ 中的noexcept:从 “承诺不抛异常” 到编译器判断
  • 广州网站优化服务商做俄罗斯外贸网站推广
  • 4.4 【2014统考真题】
  • 社交风格与销售培训讲师培训师唐兴通谈社交销售大客户营销DISC销售大五人格MBTI销售方法论实践
  • 【SSL】什么是自签名证书及使用Java生成SSL自签名证书
  • 从繁琐到高效:文档抽取技术驱动医疗健康行业的数字化转型
  • 做网站 阿里云河南推广网站
  • 在VSCode+Guider基础上:拖动滑条控件,显示滑条数值
  • 斯坦福大学 | CS336 | 从零开始构建语言模型 | Spring 2025 | 笔记 | Lecture 7: Parallelism 1
  • cookie、session、token、JWT(JSON Web Token)
  • 免费学平面设计的网站如何开设一个网站
  • WebGIS开发智慧校园(14)地图控件的添加
  • Agent Demo初体验
  • Cursor 项目实战:AI播客策划助手开发指南(一)——需求分析与功能原型
  • 当AI遇上Python:重新定义编程学习的《AIGC高效编程:Python从入门到高手》
  • 成都上界品牌设计事务所小红书搜索优化
  • Apache Calcite查询规划
  • Linux网络——传输层协议UDPTCP