和为s的两个数字(简单难度)

本文介绍了如何利用双指针法解决一个简单的算法问题:在递增排序数组中寻找两个数,使得它们的和等于给定的目标值。通过设置两个指针分别从数组首尾开始遍历,根据当前指针所指元素之和与目标值的比较,调整指针位置,最终找到满足条件的一对数字。代码实现中,时间复杂度为O(N),空间复杂度为O(1)。
摘要由CSDN通过智能技术生成

题目概述(简单难度)

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]

示例 2:

输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]

附上leetcode链接:
点击此处进入leetcode

思路与代码

思路展现

这道题目首先告诉我们数组是一个递增排序的数组,所以此时我们想到可以用双指针法来做这道题目.
思路如下:

指针 i指向数组首位数字,指针 j 指向数组末位数字。
若两数字之和s大于了 target,则指针 j 往左移一位。
若两数字之和s小于了 target,则指针 i 往右移一位。
若两数字之和s等于了 target,返回结果 [i, j]即可。

代码示例

class Solution {
    public int[] twoSum(int[] nums, int target) {
       int i=0;
       int j=nums.length-1;
       while(i<j){
           int s=nums[i]+nums[j];
           if(s<target){
              i++; 
           }else if(s>target){
              j--;
           }else{
              return new int[]{nums[i],nums[j]}; 
           }   
       }
       return new int[0];
    }
}

总结

1:此算法
时间复杂度O(N):N 为数组 numsnums 的长度
空间复杂度O(1):变量 i, j 使用常数大小的额外空间
2:数组的双指针思路,是针对数组是有序数组,正因为如此我们才将这道算法题目的空间复杂度降到了O(1).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值