首页 > 编程语言 >LeetCode算法笔记 1. 两数之和

LeetCode算法笔记 1. 两数之和

时间:2022-10-09 22:45:30浏览次数:45  
标签:target nums int System 算法 println LeetCode 两数 out

public class LeetCode02_1 extends TestCase {

    /**
     * 1. 两数之和
     * 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
     * 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
     * 你可以按任意顺序返回答案。
     * <p>
     * 示例 1:
     * 输入:nums = [2,7,11,15], target = 9
     * 输出:[0,1]
     * 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
     * <p>
     * 示例 2:
     * 输入:nums = [3,2,4], target = 6
     * 输出:[1,2]
     * <p>
     * 示例 3:
     * 输入:nums = [3,3], target = 6
     * 输出:[0,1]
     * <p>
     * 提示:
     * 2 <= nums.length <= 104
     * -109 <= nums[i] <= 109
     * -109 <= target <= 109
     * 只会存在一个有效答案
     * 进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?
     */
/** * 方法一:暴力枚举 * 时间复杂度:O(N^2),其中 NN 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。 * 空间复杂度:O(1) */ public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] == target) { return new int[]{i, j}; } } } return new int[0]; } /** * 方法二:哈希表 * 时间复杂度:O(N),其中 NN 是数组中的元素数量。对于每一个元素 x,我们可以 O(1)O(1) 地寻找 target - x。 * 空间复杂度:O(N),其中 NN 是数组中的元素数量。主要为哈希表的开销。 */ public int[] twoSum2(int[] nums, int target) { HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { if (map.containsKey(target - nums[i])) { return new int[]{i, map.get(target - nums[i])}; }else { map.put(nums[i], i); } } return new int[0]; } public void test01() { int[] nums1 = {2, 7, 11, 15}; int[] nums2 = {3, 2, 4}; int[] nums3 = {3, 3}; System.out.println(Arrays.toString(twoSum(nums1, 9))); System.out.println(Arrays.toString(twoSum(nums2, 6))); System.out.println(Arrays.toString(twoSum(nums3, 6))); System.out.println("====================================="); System.out.println(Arrays.toString(twoSum2(nums1, 9))); System.out.println(Arrays.toString(twoSum2(nums2, 6))); System.out.println(Arrays.toString(twoSum2(nums3, 6))); } }

  

标签:target,nums,int,System,算法,println,LeetCode,两数,out
From: https://www.cnblogs.com/sueyyyy/p/16773983.html

相关文章

  • 牛客网高频算法题系列-BM18-二维数组中的查找
    牛客网高频算法题系列-BM18-二维数组中的查找题目描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺......
  • KMP 算法 再次学习
    c++版后面再补packagecn.kbug.dynamic;importjava.util.Arrays;/***KMP算法本质上是对搜索的字符串做优化,然后在匹配的时候,能做到非常省时间*如果搜索的串......
  • Raft 共识算法:全貌
    转载请注明出处:https://www.cnblogs.com/morningli/p/16768025.htmlRaft基础raft集群由若干server组成,典型的集群包含5个server,这样可以允许两个server发生故障。这些s......
  • Leetcode 11 -- 双指针&&贪心
    题目说明盛水最多的容器题目要求我们找出两个边界\(L\)和\(R\),使得容量:\(min(right[L],right[R])*(R-L)\)的值最大。思路算法不是玄学。首先,两层for循......
  • 排序算法
    排序算法选择排序:先将数列完完全全检索一边,然后选出最小的数与最左边数字替换;接着从第二个数字开始再检索整个数列,选出最小的数字后与第二个数字替换,以此类推;重复步骤1......
  • 排序算法
    选择排序#include<stdio.h>intmain(){inti,j,t,a[9];//定义变量及数组为基本整型printf("请输入8个数:\n");for(i=1;......
  • leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)
    一、题目大意给你一棵二叉树的根节点root,返回其节点值的后序遍历。示例1:输入:root=[1,null,2,3]输出:[3,2,1]示例2:输入:root=[]输出:[]示例3:输入:root......
  • 算法,比较rust golang nodejs 斐波那契算法
    运行环境:macOSm1javascriptfunctionfid(n){if(n==0)return0if(n==1)return1returnfid(n-1)+fid(n-2)}letstart_time=Date.now();fid(50)lete......
  • 【路径规划-TSP问题】基于蚁群算法求解旅行商问题含Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • LeetCode 2434. Using a Robot to Print the Lexicographically Smallest String
    原题链接在这里:https://leetcode.com/problems/using-a-robot-to-print-the-lexicographically-smallest-string/题目:Youaregivenastring s andarobotthatcurr......