LeetCode 349: 给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序.
思路:
需要在输出结果中做去重操作,所以可以选择Set来操作。HashSet自带去重。
需要SetA来存放nums1,然后遍历nums2,判断nums2的每个元素是否存在于SetA中
代码:
package com.dwj.LeetCode.HashList; import java.util.HashSet; import java.util.Set; /** * 两数组相交,返回相交元素的集合,不含重复元素 */ public class ArrayBanana { class Solution { public int[] intersection(int[] nums1, int[] nums2) { if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) { return new int[0]; } Set<Integer> set1 = new HashSet<>(); Set<Integer> resSet = new HashSet<>(); //遍历数组1 for (int i : nums1) { set1.add(i); } //遍历数组2的过程中判断哈希表中是否存在该元素 for (int i : nums2) { if (set1.contains(i)) { resSet.add(i); } } //将结果几何转为数组 return resSet.stream().mapToInt(x -> x).toArray(); } } }
LeetCode 1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
思路:这一题,判断是否存在,想到可以使用哈希表的方法来做。首先遍历拿到一个数字,然后通过与目标值做减法,判断
这个数字之前是否出现过,如果出现过,返回两个数的下标。由于这一题需要存下标值和元素值,可以使用Map存储,特别
注意的是,map用key存放元素值比较合适,因为我们需要主要判断元素的值。
代码:
package com.dwj.LeetCode.HashList; import java.util.HashMap; import java.util.Map; public class TwoNumberPlus { public int[] twoSum(int[] nums, int target) { int[] res = new int[2]; if(nums == null || nums.length == 0){ return res; } 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); } map.put(nums[i], i); } return res; } }
LeetCode202 快乐数
对快乐数的定义是:
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
是一个把计算通过平方求和延续下去的过程
思路:
首先,判断是否存在,是否出现的问题,想到使用哈希表来做。此题是一个循环判断的问题,首要搞清楚,终止条件是什么?最终的和一直等于1
取每个数的操作可以通过取余和除来完成。要写一个方法来完成对每个数进行平方求和的操作,然后使用wile进行循环判断是否满足继续进行的条件。、
代码:
package com.dwj.LeetCode.HashList; import java.util.HashSet; import java.util.Set; public class HappyNumber { class Solution { public boolean isHappy(int n) { Set<Integer> record = new HashSet<>(); while (n != 1 && !record.contains(n)) { record.add(n); n = getNextNumber(n); } return n == 1; } private int getNextNumber(int n) { int res = 0; while (n > 0) { int temp = n % 10; res += temp * temp; n = n / 10; } return res; } } }
总结:在题目给出描述,元素是否出现过,是否存在..... 要想到使用哈希列表来实现。
标签:return,nums,int,res,Day4,随想录,数组,代码,nums2 From: https://www.cnblogs.com/dwj-ngu/p/16800795.html