242.有效的字母异位词https://leetcode.cn/problems/valid-anagram/description/
思路:做一个基础版哈希表,哈希函数为key-'a',这样两个字符串的每个字母都会映射在26长的数组中,使用数组自增记录字母出现次数。
class Solution {
public boolean isAnagram(String s, String t) {
int[] alphabet = new int[26];
if(s.length()!=t.length()){
return false;
}
for (int i = 0; i < s.length(); i++) {
alphabet[s.charAt(i)-'a']++;
}
for (int i = 0; i < t.length(); i++) {
alphabet[t.charAt(i)-'a']--;
}
for (int i = 0; i < 26; i++) {
if (alphabet[i] !=0) {
return false;
}
}
return true;
}
}
-----------------------分割线-------------------------
349. 两个数组的交集 https://leetcode.cn/problems/intersection-of-two-arrays/
思路:使用set,了解set特性与方法。注意set没有get()方法,所以便利set方式比较特殊。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null ||nums2==null){
return null;
}
Set<Integer> set1 = new HashSet<>();
Set<Integer> ansSet = new HashSet<>();
for(int i = 0;i<nums1.length;i++){
set1.add(nums1[i]);
}
for(int i = 0;i<nums2.length;i++){
if(set1.contains(nums2[i])){
ansSet.add(nums2[i]);
}
}
int[] ansInt = new int[ansSet.size()];
int index =0;
for(int i:ansSet){
ansInt[index] =i;
index++;
}
return ansInt;
}
}
-----------------------分割线-------------------------
202.快乐数https://leetcode.cn/problems/happy-number/submissions/495689567/
思路:难点①:n的取值范围为int范围,所以要依次取每一位数平方和相加,我使用的是String.charAt()-'0'取得char的每一个int值,较为罗嗦麻烦。
-------改进①:因为取每一位平方和,所以从高位取地位取都可以,可以使用while(n%10>0)的方式取得。
-------难点②:如果平方和重复出现一次,后续就会出现死循环,就绝对不是快乐数,可以直接返回false;所以每次可以将结果加入set中,判断是否重复,知道重复或符合快乐数条件。
class Solution {
public boolean isHappy(int n) {
Set<Integer> set01 = new HashSet<>();
String s = "";
int sum = n;
while (true) {
s = "";
s += sum;
sum = 0;
for (int i = 0; i < s.length(); i++) {
sum += (int) (s.charAt(i) - '0') * (int) (s.charAt(i) - '0');
}
if (sum == 1) {
return true;
}
if (set01.contains(sum)) {
return false;
}
set01.add(sum);
}
}
}
-----------------------分割线-------------------------
1. 两数之和https://leetcode.cn/problems/two-sum/description/
思路:使用Map,遍历数组,对元素判断target-nums[i]是否在Map中,若不存在则将该元素接入Map中,判断下一元素,若存在,则返回当前元素索引与Map中的索引。
难点:理解并使用Map的方法。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] ans = new int[2];
if (nums == null || nums.length == 0) {
return ans;
}
Map<Integer, Integer> map = new HashMap<>();
int x = 0;
for (int i = 0; i < nums.length; i++) {
x = target - nums[i];
if (map.containsKey(x)) {
ans[0] = i;
ans[1] = map.get(x);
break;
} else {
map.put(nums[i], i);
}
}
return ans;
}
}
标签:return,nums,int,代码,随想录,length,new,第五天,sum
From: https://www.cnblogs.com/cssg/p/17965532