松原建设小学网站宁波网站建设团队
原题链接:
1. 两数之和
https://leetcode.cn/problems/two-sum/
完成情况:
##1. n 2 n^2 n2复杂度
2.HashMap进行优化
3.空间换时间方法
即,构建一个 1 0 − 9 10^-9 10−9 到 1 0 9 10^9 109这个大的数组,然后把数填进去,直接一个for循环即可搞定。
因此,总共会用到两个for循环,时间复杂度即2* O ( n ) O(n) O(n),但是空间复杂度会超级大。
解题思路:
1. n 2 n^2 n2复杂度
没啥思路,暴力循环
2.HashMap进行优化
这里当时没转过弯,为啥**map.put(nums[i],i);**要放在后面,
仔细一想,你for的时候检查的是1,但是put之后,map就会增加,==========
它的底层是链表啊,迭代器之类的,我估计,所以你放在前面的话,会导致i值向上偏。
当然了,说错了,请狂喷我。这里真的不是很懂= =~
参考代码:
1. n 2 n^2 n2复杂度
package 西湖算法题解;public class _1_两数之和 {public int[] twoSum(int[] nums, int target) {int ans[] = 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){ans[0] = i;ans[1] = j;return ans;}}}return ans;}
}
2.HashMap进行优化
class Solution {public int[] twoSum(int[] nums, int target) {int res [] = new int[2];Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++){int temp = target - nums[i];if(map.containsKey(temp)){res[1] = i;res[0] = map.get(temp);return res;}map.put(nums[i],i);}return res;}
}
/**/