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

完整代码实现

java 复制代码
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;
    }
}
java 复制代码
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(numbersfirst + numberssecond > target) {

break;

} 如果numbersfirst + numberssecond > target 说明之后的数都要大于目标值,可以直接终止内循环

2 头尾指针法:

初始化指针:

left 指向数组头部(最小元素)。

right 指向数组尾部(最大元素)。

循环条件:

当 left < right 时,持续搜索。

比较和调整:

计算当前和 sum = numbersleft + numbersright

如果 sum == target,直接返回结果。

如果 sum < target,说明需要更大的数,因此 left 右移(left++)。

如果 sum > target,说明需要更小的数,因此 right 左移(right--)。

算法正确性

有序数组的利用:

数组升序排列保证了 left 右移会增大和,right 左移会减小和。

无遗漏性:

每次移动至少排除一个不可能的解,确保不会错过正确答案。

复杂度分析

时间复杂度:O(n),最多遍历整个数组一次。

空间复杂度:O(1),仅使用常数级别的额外空间。

. 边界处理

输入保证:题目保证存在唯一解,因此无需处理无解情况。

索引转换:返回的索引从 1 开始,因此结果需要 +1。

相关推荐
noipp1 小时前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
程序员二叉2 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木2 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕3 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
北域码匠4 小时前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
袁小皮皮不皮4 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
手写码匠5 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
装不满的克莱因瓶5 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
BomanGe15 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
Matrix_115 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影