java基础
-
数组初始化
int []num = new int[26]; -
String是一个类,求其长度是一个方法,所以要加小括号
-
java中string不能拆 char[]
-
for i遍历 i是元素值,而不是下标
-
哈希表有:数组、Set、Map
-
java set-hashset# Java集合(七)Set、HashSet
//力扣中这两句必须要加
import java.util.HashSet;
import java.util.Set;
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
if (set1.contains(i)) {xxx}
// 集合转化为数组
//方法一
return set1.stream().mapToInt(x -> x).toArray();
//方法二
int[] arr = new int[set1.size()];
int j = 0;
for(int i : resSet){
arr[j++];
}
我的错误:HashSet拼写有误、初始化少了<>、for i遍历 i是元素值,而不是下标
7.map
Map<Integer,Integer> mymap = new HashMap<>();
mymap.put(nums[i],i);
if(mymap.containsKey(temp)) {...}
242.有效的字母异位词
出错的点: 1、Java数组初始化错误, 2、求String长度,length() 正确解法:
class Solution {
public boolean isAnagram(String s, String t) {
int []num = new int[26];
//String是一个类,求其长度是一个方法,所以要加小括号
for(int i=0; i<s.length(); i++) {
char str = s.charAt(i);
num[str-'a'] += 1;
}
for(int i=0; i<t.length(); i++) {
char str = t.charAt(i);
num[str-'a'] -= 1;
}
for(int i=0; i<num.length; i++) {
if(num[i]!=0) {
return false;
}
}
return true;
}
}
349. 两个数组的交集
示例1告诉我们,是要去重的
哈希表擅长解决: 给你一个元素判断是否出现过
如果数值很大,用数组就不合适。
我的错误:① HashSet相关操作 ② for i遍历 i是元素值,而不是下标 ③ 没有import引用
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
for(int i : nums1) {
set1.add(i);
}
for(int i : nums2) {
if(set1.contains(i)) {
set2.add(i);
}
}
int[] res = new int[set2.size()];
int k = 0;
for(int j : set2) {
res[k++] = j;
}
return res;
}
}
202. 快乐数
超时版本:之前是可以的,不知道是力扣问题还是代码有误,一直提示超时
class Solution {
public boolean isHappy(int n) {
Set<Integer> myset = new HashSet<>();
int sum = 0;
int num = n;
while(true) {
sum = 0;
while(num!=0) {
int x = num%10;
sum += x*x;
num=num/10;
}
if(sum == 1) { return true; }
if(!myset.contains(num)) {
myset.add(sum); //这里是把sum添加进去
} else{
return false;
}
num = sum;
}
}
}
正确版本(提取函数):
class Solution {
public boolean isHappy(int n) {
Set<Integer> myset = new HashSet<>();
while(true) {
n = getSum(n);
if(n == 1) { return true; }
if(!myset.contains(n)) {
myset.add(n); //这里是把sum添加进去
} else{
return false;
}
}
}
private int getSum(int num) {
int sum= 0;
while(num != 0) { //这里不能写 while(num)
int tmp = num % 10;
sum += tmp*tmp;
num /= 10;
}
return sum;
}
}
1. 两数之和
return写在if单分支会有歧义
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer>mymap = new HashMap<Integer,Integer>();
int[] res = new int[2];
for(int i=0; i<nums.length; i++) {
int tmp = target-nums[i];
if(mymap.containsKey(tmp)) {
res[0] = i;
res[1] = mymap.get(tmp);
break;
}
mymap.put(nums[i],i);
}
return res;
}
}