算法题总结

  • 在线 oj 输入
1
2
3
4
5
6
7
8
9
10
import java.util.Scanner; 
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s =in.nextLine();
String[] str = s.spilt(" ");
for(String data : str)
System.out.println(data);
}
}

更具体一点的:https://blog.csdn.net/da_kao_la/article/details/80225003?utm_source=blogxgwz2

  • 数组都是arr.length,字符串是str.length(),列表是list.size()
  • 字符串 ——> 数组,可以有 str.toCharArray(),然后数组 —–> 字符串 是 new String(arr),注意如果想要直接打印数组内容则是 Arrays.toString(arr),打印多维数组是 Arrays.deeptoString()
  • String 不能直接变化,但是可以用StringBuilder
1
2
3
StringBuilder sb = new StringBuilder(str);
sb.replace(1,2,"aa");
return sb.toString();
不管是数组转换成集合,还是集合转换成数组,都要注意转换类型的一致性,String[]数组转String类型的集合,当需要使用int,double等集合的时候,需要使用对应的对象
如:数组int[]用Integer[],double[]用Double[] ,因为List集合是对象的集合,而int、double等不是对象,所以需要用字段的对应对象类
  • 数组直接转成列表
1
2
3
4
// 注意这里必须是 Integer对象的数组,否则转不了
Integer[] nums = {1,2,3};
ArrayList arr= new ArrayList<>(nums.length);
Collections.addAll(arr,nums);
1
2
// 好像也可以,但是跟上面一样,得是 String、Integer类型的数组
Arrays.asList(arr);

如果是int,需要装箱再转才可以

1
2
3
int[] a = {1,2,3,4};
List arr = Arrays.stream(a).boxed().collect(Collectors.toList());
System.out.println(arr);
  • 列表转数组

采用集合的toArray()方法直接把List集合转换成数组,这里需要注意,不能这样写:

1
String[] array = (String[]) mlist.toArray();

这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误,这是为何呢,这样写看起来没有问题啊

因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的 。正确的写法应该是这样的:

1
String[] array = mlist.toArray(new String[0]);
1
2
3
4
5
List<int[]> res = new ArrayList();
res.add(new int[]{1,2});
res.add(new int[]{3,4});
System.out.println(res);
int[][] a = res.toArray(new int[0][]);
1
2
3
4
5
6
List<Integer> res = new ArrayList();
res.add(1);
res.add(2);
System.out.println(res);
Integer[] a = res.toArray(new Integer[0]);
System.out.println(Arrays.toString(a));
  • 哈希表中统计数出现的次数
1
2
3
4
5
6
7
8
9
class Solution {
public void majorityElement(int[] nums) {
Map<Integer, Integer> numCount = new HashMap<>();
for (int num : nums) {
int count = numCount.getOrDefault(num, 0) + 1;
numCount.put(num, count);
}
}
}
  • 对哈希map中的 value 值升序排列
1
2
3
4
5
6
7
8
9
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(hashMap.entrySet());
Collections.sort(list, (o1, o2) -> {
int compare = (o1.getValue()).compareTo(o2.getValue());
return compare;
});
Map<Integer, Integer> returnMap = new LinkedHashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : list) {
returnMap.put(entry.getKey(), entry.getValue());
}
  • 数字转字符,字符转数字
1
2
3
4
5
6
7
8
9
10
// 数字转字符 方式一
String str = "1230";
int d = Integer.parseInt(str); //静态函数直接通过类名调用

// 数字转字符 方式二
int d3 = Integer.valueOf("1230");
System.out.println("digit3: " + d3);

// 字符转数字
String s = String.valueOf(d);
Thank you for your accept. mua!
-------------本文结束感谢您的阅读-------------