T1 两数之和
题目
链接:
https://leetcode.cn/problems/two-sum/submissions/517876748/?envType=study-plan-v2&envId=top-100-liked
【刷题感悟】这道题用两层for循环也能做出来,但我们还是要挑战一下时间复杂度小于 O ( n 2 ) O(n^2) O(n2)的解法,不能因为它是第一道 而且还是简单题就不做,题目还是常做常新的,从中挖掘新的学习点也是一个一件很有价值的事情。
代码:
public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> indexValueMap = new HashMap<>();for (int ii = 0; ii < nums.length; ii++) {// 把数值作为key,下标作为value好一点,因为value比key方便获取而且题目最终是希望我们返回数组下标if (indexValueMap.containsKey(target - nums[ii])) {// 初始化数组的方法return new int[] {ii, indexValueMap.get(target - nums[ii])};}indexValueMap.put(nums[ii], ii);}// 返回一个空数组return new int[] {};}
常用小技巧
初始化数组的方法
new int[] {1, 2};
初始化List的方法
new ArrayList<>(){{ // 两层括号add(str);
}};
将字符串转换成它的字典序字符串
char[] chartArr = string.toCharArray(); // 先把字符串转成char数组
Arrays.sort(chartArr); // 按字典序排列
return String.valueOf(chartArr); // char数组转成字符串