6.《双指针篇》---⑥和为S的两个数字(中等但简单)(牛客)

题目传送门

方法一:暴力解法。双循环

方法二:双指针(推荐)

1.定义一个顺序表,定义左右双指针

2.while循环。判断array[left] + array[right] 的值。

3.若等于则将这两个值加入数组。并break

4.若大于则right--

5.若小于则left++。

6.最后return arr;

java 复制代码
import java.util.*;
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
        ArrayList<Integer> arr = new ArrayList<>();
        int left = 0; int right = array.length-1;
        
        while(left < right){
            if(array[left] + array[right] == sum){
                arr.add(array[left]);
                arr.add(array[right]);
                break;
            }
            if(array[left] + array[right] > sum){
                right--;
            }else{
                left++;
            }
        }
        return arr;
    }
}

复杂度分析:

方法三:哈希表

1.定义一个arr数组用来返回。定义一个HashMap用来判断和是否为sum

2.定义一个for循环并遍历array数组。在哈希表中找sum - array[i] 的值。若是没找到则加入哈希表。若是找到了。则将这个值和 array[i] 添加到数组中。

3.返回return

java 复制代码
import java.util.*;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> arr = new ArrayList<Integer>();
        //创建哈希表,两元组分别表示值、下标
        HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
        //在哈希表中查找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{
                //取出数字添加
                arr.add(temp);   
                arr.add(array[i]);
                break;
            }
        }
        return arr;
    }
}

复杂度分析:

相关推荐
小楼v10 小时前
使用Nacos实现动态IP黑名单过滤
java·后端·微服务·nacos
鱼跃鹰飞10 小时前
Leetcode会员尊享面试100题:333.最大二叉搜索子树
数据结构·算法·leetcode·面试
日拱一卒——功不唐捐10 小时前
交换排序:冒泡排序和快速排序(C语言)
c语言·数据结构·算法
2301_7903009610 小时前
C++与物联网开发
开发语言·c++·算法
山楂树の10 小时前
3D渲染分层机制 Layers 的原理分析(Threejs)
数据结构·3d·相机
鱼跃鹰飞10 小时前
Leetcode会员尊享面试100题:255.验证二叉搜索树的前序遍历序列
算法·leetcode·面试
A懿轩A10 小时前
【Java 基础编程】Java 运算符完全指南:算术/关系/逻辑/位运算与优先级,避免常见坑
java·开发语言
踩坑记录10 小时前
leetcode hot100 146. LRU 缓存 medium OrderedDict 双向链表 双向字典 哈希表
数据结构·链表
时艰.10 小时前
Java 并发编程核心知识点
java·开发语言
雾削木10 小时前
使用 ESPHome 的核心指令
java·前端·javascript·单片机·嵌入式硬件