242: 主要学习到如果不用记住ascii就直接在hash[]中定位到合适的位置。这个是数组hash,感觉就是用array储存。
时间复杂度: O(n),空间复杂度: O(1)
Code:
class Solution {
public boolean isAnagram(String s, String t) {
int[] hash = new int[26];
for(int i=0; i<s.length(); i++){
hash[s.charAt(i) - 'a']++;
}
for(int j=0; j<t.length(); j++){
hash[t.charAt(j) - 'a']--;
}
for(int k=0; k<26; k++){
if(hash[k] != 0){
return false;
}
}
return true;
}
}
349:
Hashset 思路:建立两个hashset:set1,set2。然后把nums1和num2的数字分别放进去,然后去看set2里面有没有contain set1的数字,有的话就加进finalist。然后最后把finalist这个hashset转换成array。
code:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
for(int i:nums1){
set1.add(i);
}
Set<Integer> set2 = new HashSet<>();
for(int i:nums2){
set2.add(i);
}
Set<Integer> finalset = new HashSet<>();
for(int i:set1){
if(set2.contains(i)){
finalset.add(i);
}
}
int[] result = new int[finalset.size()];
int index = 0;
for(int i : finalset){
result[index] = i;
index++;
}
return result;
}
}
数组思路:直接建一个数组,把有nums1的位置都变成1。然后在nums2里面找,如果位置已经有1,就变成2。最后循环hash,如果hash[i]==2,那就证明有重复,加入result。
Code:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] hash = new int[1001];
int count = 0;
for(int i=0; i<nums1.length; i++){
hash[nums1[i]] = 1;
}
for(int i=0; i<nums2.length; i++){
if(hash[nums2[i]] == 1){
hash[nums2[i]] = 2;
count++;
}
}
int[] result = new int[count];
int pos = 0;
for(int i=0; i<hash.length; i++){
if(hash[i] == 2){
result[pos] = i;
pos++;
}
}
return result;
}
}
202
思路主要为查找有没有同样的sum,如果有的话,就跳不出那个循环。重要的点是要定义一个新的method,去找下一个number,而这里return的是这个数的digit平方后的数。
Code:
class Solution {
public boolean isHappy(int n) {
Set<Integer> sum = new HashSet<>();
while(n!=1 &&!sum.contains(n)){
sum.add(n);
n = getNextnumber(n);
}
return n==1;
}
private int getNextnumber(int n){
int res = 0;
while(n>0){
int temp = n%10;
res += temp * temp;
n = n/10;
}
return res;
}
}
1
主要学会如何使用Hashmap,先取一个数,然后在hashmap里面找有没有target减去那个数的值,如果有,直接填进result。如果没有,就把数加入hashmap,然后用后面的数继续去搜素。
Code:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0; i<nums.length; i++){
int difference = target-nums[i];
if(map.containsKey(difference)){
result[1] = i;
result[0] = map.get(difference);
break;
}else{
map.put(nums[i],i);
}
}
return result;
}
}