公司网站建设申请报告,大连在哪个省市,个人电脑安装win2003做网站,快速生成网站LeetCode第一题#xff0c;两数之和
因为是第一题所以热度比较高#xff0c;有很多种解法 给定一个整数数组 nums 和一个整数目标值 target#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应…LeetCode第一题两数之和
因为是第一题所以热度比较高有很多种解法 给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target 的那 两个 整数并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1 输入nums [2,7,11,15], target 9 输出[0,1] 解释因为 nums[0] nums[1] 9 返回 [0, 1] 。 示例 2 输入nums [3,2,4], target 6 输出[1,2] 示例 3 输入nums [3,3], target 6 输出[0,1] 提示 2 nums.length 104 -109 nums[i] 109 -109 target 109 只会存在一个有效答案 进阶你可以想出一个时间复杂度小于 O(n2) 的算法吗 思路一
暴力循环 双重循环更新i 和 j 时要注意 j 的范围一定比 i 的范围小
class Solution {public int[] twoSum(int[] nums, int target) {//定义一个整数n为数组长度int n nums.length;//双重循环暴力解法for(int i 0; i n; i){ for(int j i1; j n; j){if(nums[i] nums[j] target){//返回一个由两个整数元素组成的数组这两个元素分别是i和j的值return new int[]{i, j};}}}return null;}
}可以使用不同的方法来创建数组。以下是几种常用的方法
使用数组字面量初始化数组 int[] array {1, 2, 3, 4, 5};这种方式通过在大括号中列出元素的值来定义并初始化数组。编译器会根据提供的初始值自动推断数组的长度。
使用new关键字创建数组并指定长度 int[] array new int[5];这种方式使用new关键字创建一个指定长度的数组并将其赋值给变量。在上述示例中创建了一个长度为5的int类型数组。
使用new关键字创建多维数组 int[][] matrix new int[3][3];这种方式可以创建多维数组例如二维数组。在上述示例中创建了一个3x3的二维int数组。
使用Array.newInstance()方法创建数组 int[] array (int[]) Array.newInstance(int.class, 5);这种方式使用Array.newInstance()方法创建数组并指定数组的类型和长度。上述示例中创建了一个长度为5的int类型数组。
当涉及到 Array 类时需要注意在 Java 中Array 是一个类用于表示数组它提供了一些静态方法用于操作和处理数组。
以下是 Array 类的一些常用方法
Array.getLength(Object array): 返回指定数组对象的长度。Array.get(Object array, int index): 返回指定数组对象中索引位置的元素。Array.set(Object array, int index, Object value): 将指定数组对象中索引位置的元素设置为指定的值。Array.copyOf(Object[] original, int newLength): 创建一个新数组将原始数组中的元素复制到新数组中并指定新数组的长度。Array.copyOfRange(Object[] original, int from, int to): 创建一个新数组将原始数组中指定范围的元素复制到新数组中。Array.fill(Object[] array, Object value): 将指定数组中的所有元素设置为指定的值。 思路二 哈希表
新建一个哈希表 对于每一个x首先查询哈希表中是否存在target - x 然后将x插入到哈希表中防止自己被自己匹配
class Solution {public int[] twoSum(int[] nums, int target) {//HashMapInteger, Integer() 创建了一个新的 HashMap 实例并将其赋值给 hashtable 变量。MapInteger, Integer hashTable new HashMapInteger, Integer();for(int i 0; i nums.length; i){//如果hashtable中存在键target - nums[i]//返回新建数组索引分别为target-nums[i] 和 iif(hashTable.containsKey(target - nums[i])){return new int[]{hashTable.get(target - nums[i]), i};}//如果不存在键target - nums[i]//在hashTable中加入nums[i]和其索引hashTable.put(nums[i], i);}return new int[0];}
}return new int[]{hashtable.get(complement), i}
这行代码创建一个新的整型数组并使用大括号 {} 初始化数组的元素。数组中有两个元素分别是 hashtable.get(complement) 和 i。
hashtable.get(complement)表示从哈希表 hashtable 中获取键为 complement 的值。在这个代码示例中complement 是目标值与当前元素差值即 target - nums[i]。因为哈希表中存储的是数组元素及其索引的映射关系所以 hashtable.get(complement) 返回的是差值所对应的索引。
i 是当前元素的索引表示数组的第 i 个元素。 因此这行代码的作用是返回一个新的整型数组数组的第一个元素是差值所对应的索引第二个元素是当前元素的索引。这样可以找到满足条件的两个数在原始数组中的索引位置。
MapInteger, Integer hashtable new HashMapInteger, Integer() 这行代码声明了一个名为 hashtable 的变量其类型为 MapInteger, Integer表示这是一个将整数类型键映射到整数类型值的哈希表。
HashMapInteger, Integer() 创建了一个新的 HashMap 实例并将其赋值给 hashtable 变量。HashMap 是 Java 中的一个哈希表实现它通过哈希函数将键映射到存储桶以提供高效的键值对访问。