242.有效的字母异位词
定一个数组叫做record,大小为26就可以了,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。知道具体的范围用数组,比较稀疏用set
charsecondChar= s.charAt(1); // 获取第二个字符
获取长度:
s.length()
记得加括号
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
int[] set_s=new int[26];
for(int i=0;i<s.length();i++){
set_s[s.charAt(i)-'a']++;
}
for(int i=0;i<t.length();i++){
set_s[t.charAt(i)-'a']--;
}
for(int i:set_s){
if (i!=0){
return false;
}
}
return true;
}
}
349. 两个数组的交集
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null||nums1.length==0||nums2==null||nums2.length==0){
int[] result=new int[0];
return result;
}
Set<Integer> num1_set = new HashSet<>();
Set<Integer> num2_set = new HashSet<>();
for(int i:nums1){
if(!num1_set.contains(i)){
num1_set.add(i);
}
}
for(int i:nums2){
if(num1_set.contains(i)&&!num2_set.contains(i)){
num2_set.add(i);
}
}
int[] result=new int[num2_set.size()];
int j=0;
for(int i:num2_set){
result[j++]=i;
}
return result;
}
}
这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。
- 时间复杂度: O(n + m) m 是最后要把 set转成vector
- 空间复杂度: O(n)
第202题. 快乐数
class Solution {
public int get_sum(int n){
int sum=0;
int count=0;
while(n/10!=0){
count = n%10;
sum+=count*count;
n=n/10;
}
sum+=n*n;
System.out.println(sum);
return sum;
}
public boolean isHappy(int n) {
Set<Integer> record=new HashSet<>();
while(n!=1&&!record.contains(n)){
record.add(n);
n=get_sum(n);
// if(count>=5){
// break;
// }
}
if (n==1){
return true;
}
else{
return false;
}
}
}
- 时间复杂度: O(logn)
- 空间复杂度: O(logn)
两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
if(nums == null || nums.length == 0){
return null;
}
Map<Integer,Integer> record=new HashMap<>();
int[] result=new int[2];
for(int i=0;i<nums.length;i++){
if (record.containsKey(target-nums[i])){
result[0]=i;
result[1]=record.get(target-nums[i]);
break;
}
else{
record.put(nums[i],i);
}
}
return result;
}
}
常见类型的增删改,求长度都有点懵,周末看一下以前的笔记。