打卡第五天
242.有效的字母异位词
首先设置一个hash数组,存储字母出现的次数,因为都是小写字母,所以可以直接取数组对于ascii值-’a’后的位置自增,java中string的charAt() 方法用于返回指定索引处的字符,想熟悉一下java的map和set的语法,所以这次用java写。
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 count : record){
if(count != 0){
return false;
}
}
return true;
}
}
349.两个数组的交集
同样设置一个hash数组,把出现过的数字的位置都记录为1,然后在另外一个数组中循环,有在相同位置为一的都记录到一个集合里面,集合的目的主要是为了去重,java代码如下。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//使用set是为了去重
Set<Integer> resultSet = new HashSet<>();
int[] hash = new int[1005];
//记录出现在nums1中的每一个数
for(int num : nums1){
hash[num] = 1;
}
for(int num : nums2){
if(hash[num]==1){
resultSet.add(num);
}
}
return resultSet.stream().mapToInt(x -> x).toArray();
}
}
202.快乐数
首先要知道怎么求每一位的和
while(n>0){
int temp = n%10;//求最后一位数字
result += temp * temp;
n = n/10;
}
然后想到用hashset去判断有没有重复的情况发生,一旦出现重复就可以视为死循环,即不存在,java代码如下
class Solution {
public boolean isHappy(int n) {
Set<Integer> res = new HashSet<>();
while(true) {
int sum = getSum(n);
if (sum == 1) {
return true;
}
//可以用contains()判断是否已经存在了
if(!res.contains(sum)){
res.add(sum);
n = sum;
}
else{
return false;
}
}
}
public int getSum(int n){
int result = 0;
while(n>0){
int temp = n%10;
result += temp*temp;
n = n/10;
}
return result;
}
}
1.两数之和
首先考虑用暴力法解决
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
for(int i=0;i<nums.size();++i){
for(int j=i+1;j<nums.size();++j){
if(nums[i]+nums[j]==target){
result.push_back(i);
result.push_back(j);
return result;
}
}
}
return result;
}
};
然后考虑如何使用HashMap解题
首先这道题是找有没有一个数加另一个数等于给定的数,暴力法是一遍一遍的去找有没有符合规定的数,但是用hashmap就可以知道这符合规定的数有没有被遍历过。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
Map<Integer,Integer> hashmap = new HashMap<>();
for(int i =0 ; i<nums.length;i++){
int temp = target - nums[i];
if(hashmap.containsKey(temp)){
result[0] = hashmap.get(temp);
result[1] = i;
}
hashmap.put(nums[i],i);
}
return result;
}
}