package SecondBrush.Hash; /** * 242.有效字母异位词 * 现在看到这个题目能想到怎么做,但是具体不知道怎么写 * 大致思路自己先描述一下: * 就是建立一个hash表,然后遍历s,写进表中,遍历t,减去对应的数 * hash表就可以理解为数组 */ public class ValidAnagram_242 { public boolean is_anagram(String s, String t) { int[] recode = new int[26]; for (int i = 0; i < s.length(); i++) { recode[s.charAt(i) - 'a']++; } for (int i = 0; i < t.length(); i++) { recode[t.charAt(i) - 'a']--; } for (int count : recode) { if (count != 0) { return false; } } return true; } }
package SecondBrush.Hash; import java.util.HashSet; import java.util.Set; /** * 349. 两个数组的交集 * 刚开始是没思路,只能看一下题解, * 梳理一下思路: * 定义两个set, * 遍历第一个数组,存入set中,然后遍历第二个数组,判断哈希表中是否有该元素, * 如果有将该元素加入至新set中,将set转成数组,返回数组 */ public class IntersectionOfTwoArrays_349 { 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); } } //方法2:另外申请一个数组存放setRes中的元素,最后返回数组 int[] arr = new int[resSet.size()]; int j = 0; for (int i : resSet) { arr[j++] = i; } return arr; } }
package SecondBrush.Hash; import java.util.HashSet; import java.util.Set; /** * 202. 快乐数 * 快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, * 也可能是 无限循环 但始终变不到 1。 * 如果 可以变为 1,那么这个数就是快乐数。 * * 刚看到还是没思路,操。 * 首先需要设计怎么计算每次每个位置上的平方和,想不起来,之前明明看过一遍 * * */ public class HappyNumber_202 { public boolean isHappy(int n) { Set<Integer> record = new HashSet<>(); while (n != 1 && !record.contains(n)) { record.add(n); n = getNextNum(n); } return n == 1; } public int getNextNum(int n){ int sum = 0; while (n > 0) { int temp = n % 10; sum += temp * temp; n = n / 10; } return sum; } }
package SecondBrush.Hash; import java.util.HashMap; import java.util.Map; /** * 1.两数之和 * 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。 * 再次看到的时候,还是写不出来,知道具体的思想。 * */ public class TwoSum_1 { public int[] twoSum(int[] nums, int target){ Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i< nums.length; i++) { if(map.containsKey(target - nums[i])) { return new int[] {map.get(target-nums[i]),i}; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); } }
标签:202,return,part01,day06,util,int,数组,new,public From: https://www.cnblogs.com/lipinbigdata/p/17527318.html