classSolution{publicbooleanisAnagram(String s,String t){int[]record=newint[26];for(int i =0; i < s.length(); i++){record[s.charAt(i)-'a']++;}for(int j =0; j < t.length(); j++){record[t.charAt(j)-'a']--;}for(int i =0; i <26; i++){if(record[i]!=0)returnfalse;}// for (int count : record) {// if(count != 0) return false;// }// 此种写法为增强for循环。returntrue;}}
心得
还是得勤复习啊
349. 两个数组的交集
学习文章链接:
题目分析:
暂不使用暴力法
本题的结果是返回交集,那么即不重复,考虑使用set。
set相关知识
名称
重复
null元素
容器是否有序
set
否
1个
无序
list
是
多个
有序
代码
classSolution{publicint[]intersection(int[] nums1,int[] nums2){if(nums1 ==null|| nums1.length ==0|| nums2 ==null|| nums2.length ==0)returnnewint[0];Set<Integer> set =newHashSet<>();Set<Integer> res =newHashSet<>();for(int i : nums1){
set.add(i);}for(int j : nums2){if(set.contains(j)){
res.add(j);}}return res.stream().mapToInt(x -> x).toArray();}}
心得
重温了关于set的知识
第202题. 快乐数
学习文章连接:
题目分析:
本题关键在于如果求和,其中个位是要单独处理的。
处理完各位再求十位、百位、千位等等。这里是最重要的。
set在这里的作用是避免无限循环下去。
代码:
classSolution{publicbooleanisHappy(int n){Set<Integer>record=newHashSet<>();while(n !=1&&!record.contains(n)){record.add(n);
n =getNextNum(n);}return n ==1;}privateintgetNextNum(int n){int sum =0;while(n >0){
sum +=(n %10)*(n %10);
n = n /10;}return sum;}}
心得
关于set的妙用,可以用来避免循环。
1. 两数之和
学习文章链接:
题目分析:
暴力法:即两层for循环。
使用map,数组中的值为键,索引位置为值。
两数之和,换种思想就是用target - nums[i]寻求是否在数组中存在
在进行res数组赋值时,要注意map中存在应该为0位置上的值,因为map中是先进入的。
代码:
classSolution{publicint[]twoSum(int[] nums,int target){int[] res =newint[2];if(nums ==null|| nums.length ==0)return res;Map<Integer,Integer> map =newHashMap<>();for(int i =0; i < nums.length; i++){int temp = target - nums[i];if(map.containsKey(temp)){
res[0]= map.get(temp);
res[1]= i;}
map.put(nums[i], i);}return res;}}