资阳做网站/上海网站建设关键词排名
第一题两数之和()
这个题没有什么难度啊(标示的足够清楚了)
1暴力解法 加法
class Solution {public int[] twoSum(int[] nums, int target) { //外层循环 遍历数组nums for(int i = 0;i < nums.length;i++){//定义一个整型变量自每一次的循环过程中记住数组元素中的值int first = nums[i];//内层循环 对nums[i]后面的数进行遍历 /**注意:这里不能从下标为0的数组进行遍历*示例二 6 = 3 + 3 执行会返回两个为0的下标*/for(int j = i+1;j < nums.length;j++){int lastNum = nums[j];//循环判断目标结果的值 是否等于targetif(first + lastNum == target){//记录元素的的下标 并且存储在数组中int[] resArray = {i,j};//得到数组后 直接return 并结束这个方法return resArray;}}}return null;} }
暴力破解二 减法
class Solution {public int[] twoSum(int[] nums, int target) { for(int i = 0;i < nums.length;i++){ int first = nums[i];//最后一个数字定义在了这里 代码更加简洁int lastNum = target - first; for(int j = i+1;j < nums.length;j++){if(lastNum == nums[j]){int[] resArray = {i,j};return resArray;}}}return null;} }
双列集合思路
代码优化 第三种思路双列集合HashMap(底层是数组 + 链表 + 红黑树)
这是hashmap的父类和实现的主要接口
1.hashmap中的键值对是封装在一个entry里面的 通过底层映射进行连接
这是haspmap里面的一个方法 传入的是一个键值对
class Solution {public int[] twoSum(int[] nums, int target) {//为了代码的简洁美观 new的时候泛型就不限制了 对象的类型可以省略Map<Integer, Integer> hashmap = new HashMap<>(); for (int i = 0; i < nums.length; ++i) {if (hashmape.containsKey(target - nums[i])) {return new int[]{hashmap.get(target - nums[i]), i};}hashmap.put(nums[i], i);}return new int[0]; } }
总结:
题目比较简单,毕竟暴力也可以解决,唯一的亮点就是从时间的复杂度变得稍微缓和了一点 ,对于集合
hash的使用会让人眼前一亮