LeetCode ( 1 )---两数之和(Java)
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode ( 1 )---两数之和(Java)相关的知识,希望对你有一定的参考价值。
题目来源链接:两数之和
题目说明:
解法1:直接暴力解法;双层循环嵌套,遍历两次数组;
class Solution {
public int[] twoSum(int[] nums, int target) {
//定义一个长度为2的新数组 arr ;
int[] arr=new int[2];
//从第一个数开始遍历数组nums;
for (int i = 0; i < nums.length; i++) {
//遍历数组nums(这里遍历时的起点要和开始的遍历慢一步,避免同时取到同一个索引);
for (int j = i+1; j < nums.length; j++) {
//当两个索引匹配的元素之和为target时;就把索引值赋值给新数组 arr ;
if(nums[i]+nums[j]==target){
arr[0]=i;
arr[1]=j;
}
}
}
return arr;
}
}
时间复杂度:O(n²)空间复杂度:O(1);运行效率差;
解法优化:
引入hashmap;将数组值存入hashmap中;值为key,索引为value; 然后在map集合中寻找另一半key值是否存在; 且索引i和另一半的索引不能是同一个;
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap();
for (int i = 0; i < nums.length; i++) {
//将数组按照(值,索引)存入map集合;
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int j = target - nums[i];
//判断和为target的另一个数值(即map集合的键:key值)是否存在;且数组的索引(value)不是同一个;
if (map.containsKey(j) && i != map.get(j)) {
//将符合条件的索引存入新建数组中;
return new int[]{i, map.get(j)};
}
}
//抛出参数异常;
throw new IllegalArgumentException("The data element for NUMS does not exist ");
}
}
时间复杂度,空间复杂度 O(n)
以上是关于LeetCode ( 1 )---两数之和(Java)的主要内容,如果未能解决你的问题,请参考以下文章