Leecode.242 有效的字母异位词
题目链接:有效的字母异位词
思路
new一个字母表数组,从0-25依次代表a-z,数组的值代表s中出现的次数,统计完后再统计t中出现的次数相减,最后如果是有效的字母异位词,所有的值都应该为0。
解题方法
同思路
复杂度
- 时间复杂度:
O(n)
- 空间复杂度:
O(1)
Code
class Solution {
public boolean isAnagram(String s, String t) {
int[] record = new int[26];
for(int i = 0; i < s.length(); i++){
record[s.charAt(i)-'a']++;
}
for(int i = 0; i < t.length(); i++){
record[t.charAt(i)-'a']--;
}
for(int rec : record){
if(rec != 0){
return false;
}
}
return true;
}
}
Leecode.349 两个数组的交集
题目链接:两个数组的交集
思路
看到输出结果中每个元素必须唯一,立刻想到HashSet,因为HashSet可以去重。
解题方法
先用HashSet将一个数组中的元素去重保存,再将判断另一个数组中的元素是否包含在HashSet中,如果包含,放入另一个HashSet当中,这里也用HashSet是因为结果也必须元素唯一。难点在于最后的HashSet转化为数组,这里使用了流,要背上来。
复杂度
- 时间复杂度:
O(m+n)
- 空间复杂度:
O(m+n)
Code
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set = new HashSet();
HashSet<Integer> res = new HashSet();
for(int num : nums1){
set.add(num);
}
for(int num : nums2){
if(set.contains(num)){
res.add(num);
}
}
return res.stream().mapToInt(x -> x).toArray();
}
}
Leecode.202 快乐数
题目链接:快乐数
思路
快乐数并不快乐。。。在考虑如何取数值各个位上的单个数时思考了好久,,其实就是n%10,可以得到n的个位数,然后n=n/10去掉个位数再循环取余数,太精彩了!为了更加能够理清思路,可以将取单位数的方法提取出来单独作为一个方法,看起来简单明了。
解题方法
本题用到了HashSet,快乐数有可能是无限循环的,那么如何判断无限循环,就是看在计算快乐数过程中有没有出现重复数值,这样的话Set就派上用场了。
复杂度
- 时间复杂度:
O(logn)
- 空间复杂度:
O(logn)
Code
class Solution {
public boolean isHappy(int n) {
HashSet<Integer> set = new HashSet<>();
while(n != 1 && !set.contains(n)){
set.add(n);
n = getNum(n);
}
return n == 1;
}
private int getNum(int n){
int res = 0;
while(n > 0){
int temp = n % 10;
res += temp*temp;
n = n/10;
}
return res;
}
}
Leecode.1 两数之和
题目链接:两数之和
思路
这道题由于是计算数组中两数之和是否为目标数,但是返回值却是要求返回数组两数的下标,因此要找到一个方法能够同时保存数组的值和下标,所以用HashMap来完成,这样比暴力解法少一个循环,时间复杂度降低。
解题方法
同思路
复杂度
- 时间复杂度:
O(n)
- 空间复杂度:
O(n)
Code
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
int temp = target - nums[i];
if(map.containsKey(temp)){
result[0] = i;
result[1] = map.get(temp);
break;
}
map.put(nums[i], i);
}
return result;
}
}