T35,没有token是什么意思?

 

描述

输入一个升序数组 array 和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。

数据范围: 0≤len(array)≤105​​ 0≤len(array)≤105​​ , 1≤array[i]≤106 1≤array[i]≤106 

示例1

输入:

[1,2,4,7,11,15],15

返回值:

[4,11]

说明:

返回[4,11]或者[11,4]都是可以的       

示例2

输入:

[1,5,11],10

返回值:

[]

说明:

不存在,返回空数组     

示例3

输入:

[1,2,3,4],5

返回值:

[1,4]

说明:

返回[1,4],[4,1],[2,3],[3,2]都是可以的   

示例4

输入:

[1,2,2,4],4

返回值:

[2,2]

实现代码:

import java.util.*;
public class Solution {
    public ArrayList FindNumbersWithSum(int [] array,int sum) {
        ArrayList a=new ArrayList();
        for(int i=0;i

时间复杂度:O(N^2)

其他方法:


import java.util.*;
public class Solution {
    public ArrayList FindNumbersWithSum(int [] array,int sum) {
        ArrayList res = new ArrayList();
        //创建哈希表,两元组分别表示值、下标
        HashMap mp = new HashMap();
        //在哈希表中查找target-numbers[i]
        for(int i = 0; i < array.length; i++){
            int temp = sum - array[i];
            //若是没找到,将此信息计入哈希表
            if(!mp.containsKey(temp)){ 
                mp.put(array[i], i);
            }
            else{
                //取出数字添加
                res.add(temp);   
                res.add(array[i]);
                break;
            }
        }
        return res;
    }
}

 

 

 T35,没有token是什么意思?_第1张图片

 

 

import java.util.*;
public class Solution {
    public ArrayList FindNumbersWithSum(int [] array,int sum) {
        ArrayList res = new ArrayList();
        //左右双指针
        int left = 0, right = array.length - 1;
        //对撞双指针
        while(left < right){
            //相加等于sum,找到目标
            if(array[left] + array[right] == sum){
                res.add(array[left]);
                res.add(array[right]);
                break;
            //和太大,缩小右边
            }else if(array[left] + array[right] > sum)
                right--;
            //和太小,扩大左边
            else
                left++;
        }
        return res;
    }
}

 T35,没有token是什么意思?_第2张图片

 

 题目来源:和为S的两个数字_牛客题霸_牛客网

你可能感兴趣的:(leetcode,算法,java)