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

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

题目概述(简单难度)

输入一个递增排序的数组和一个数字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).


相关文章
|
2月前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
判断一个数字是否可以表示成三的幂的和(难度:中等)
判断一个数字是否可以表示成三的幂的和(难度:中等)
|
机器学习/深度学习 测试技术 Windows
数字基带传输系统设计
数字基带传输系统设计
139 0
|
算法 前端开发
前端算法-数字出现一次
前端算法-数字出现一次
无重复字符的最长子串(中等难度)
无重复字符的最长子串(中等难度)
71 1
无重复字符的最长子串(中等难度)
|
算法 JavaScript 前端开发
算法简单题,吾辈重拳出击 - 前 n 个数字二进制中 1 的个数
最近做的题,明眼人一看都能知道大都和动态规划 DP 有关,因为就是从动态规划分类下抽取的简单题,有的题在剑指 offer 系列中是简单题,但是在力扣主列表里确实中等难度的题目。 简单与难,也并非是绝对的,每个人的感受都会不同。更重要的是,通过这些题构建基础的算法思路,建立信心。
|
存储 测试技术
只出现一次的数字(简单难度)
只出现一次的数字(简单难度)
94 0
只出现一次的数字(简单难度)
|
存储 测试技术
0~n-1中缺失的数字(简单难度)
0~n-1中缺失的数字(简单难度)
114 0
0~n-1中缺失的数字(简单难度)
数组中数字出现的次数(中等难度)
数组中数字出现的次数(中等难度)
88 0
数组中数字出现的次数(中等难度)
|
算法 索引
数组中重复的数字(简单难度)
数组中重复的数字(简单难度)
81 0
数组中重复的数字(简单难度)