IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【leetcode】1. 两数之和 -> 正文阅读

[数据结构与算法]【leetcode】1. 两数之和

算法汇总

以下是所有算法汇总,包括GitHub源码地址链接:力扣算法练习汇总(持续更新…)

题目

1. 两数之和
在这里插入图片描述
在这里插入图片描述
题目关键点:
1、“你可以假设每种输入只会对应一个答案。”
2、“数组中同一个元素在答案里不能重复出现”
3、“任意顺序返回答案”

代码

1.借助字典表hashMap

思路

建议大家做这道题目之前,先做一下这两道:

  1. 有效的字母异位词(opens new window)
  2. 两个数组的交集(opens new window)

【245 . 有效的字母异位词 (opens new window)】这道题目是用数组作为哈希表来解决哈希问题,【349. 两个数组的交集 (opens new window)】这道题目是通过set作为哈希表来解决哈希问题。

本题呢,则要使用map作为哈希表,那么来看一下使用数组和set来做哈希法的局限。

  • 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
  • set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。

此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下标。

解体的关键在于:以target=9为例,nums[0] + nums[3] = 9 ; nums[3] + nums[0] =9;因为顺序无关性,所以只要和等于9即可。

代码

class Solution {
    public int[] twoSum(int[] nums, int target) {
       if(nums == null || nums.length < 2){
           return new int[2];
       }
       int[] resultArr = new int[2];
       // 定义map,key = 数组中的值;value = 数组中的值的索引
       HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
       for(int i = 0 ; i < nums.length; i++){
               int temp = target - nums[i];
               // 判断map中是否存在这个key
               if(map.containsKey(temp)){
                   resultArr[0] = i;
                   resultArr[1] = map.get(temp);
                   break;
               }
               map.put(nums[i],i);
       }
       return resultArr;
    }
}

时间和空间复杂度

2.暴力法 - 双重for循环

思路

双重for循环。

代码

class Solution {
    public int[] twoSum(int[] nums, int target) {
       if(nums == null || nums.length < 2){
           return new int[2];
       }
       int[] resultArr = new int[2];

       for(int i = 0 ; i < nums.length; i++){
           for(int j = i + 1; j < nums.length; j++){
               if(nums[i] + nums[j] == target){
                   resultArr[0] = i;
                   resultArr[1] = j;
                   break;
               }
           }
       }
       return resultArr;
    }
}

时间和空间复杂度

很明显暴力的解法是两层for循环查找,时间复杂度是 O ( n 2 ) O(n^2) O(n2)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:48:16  更:2022-03-08 22:50:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:29:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码