java刷算法题总结

算法之路,任重道远。

作为一枚刷了一学期算法的大二生,寒假总结一下用Java刷题的技巧😎

1️⃣输入

一、读取输入并赋值

1.顺序访问,且只使用一次
数字

巧用for循环,直接比,注意第一组数据处理

str

nextInt()只读取了数字n却没有读取换行符,下一个nextLine()会读取换行符并解析为空串

nextLine 一行 & next只读字

str转int

String 字符串转整型 int 有以下两种方式:

  • Integer.parseInt(str)
  • Integer.valueOf(str).intValue()

整型 int 转 String 字符串类型有以下 3 种方法:

  • String s = String.valueOf(i);
  • String s = Integer.toString(i);
  • String s = “” + i;
2.需按索引重复访问(创建数组)
数字

可以不用二维

        // BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] line = br.readLine().split(" ");
        int n = Integer.parseInt(line[0]), m = Integer.parseInt(line[1]);
        int[][] nums = new int[n][m];
       for ( int i = 0; i < n; i++ ) {
            line = br.readLine().split(" ");
            for ( int j = 0; j < m; j++ ) {
                nums[i][j] = Integer.parseInt(line[j]);
            }
        }
 
 //自定义输入
 

二、 Java集合

  1. 同C++STL容器,java集合必掌握
  2. 数组,list,set转换
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        String[] staffs = new String[]{"Tom", "Bob", "Jane"};
        
        //数组转List
        List staffsList = new ArrayList<String>();
        for(String temp: staffs){
            staffsList.add(temp);
        }
        staffsList.add("Mary"); // ok
        staffsList.remove(0); // ok

        for (Object str:staffsList){
            System.out.print(str+" ");
        }
        =====================================================
        //List转数组
        Object[] result = staffsList.toArray();
        //List转set
        Set result = new HashSet(staffsList);
    }
}
//数组转set
Set<String> staffsSet = new HashSet<>(Arrays.asList(staffs));
staffsSet.add("Mary"); // ok
staffsSet.remove("Tom"); // ok
//set转数组
Object[] result = staffsSet.toArray();
//set转List
List<String> result = new ArrayList<>(staffsSet);
  1. 常见int型转换
  • List转int[]数组,使用java8的stream()。
        int[] arr = list.stream().mapToInt(Integer::valueOf).toArray();
  • int[]数组转List,如下:
int[] arr = {4, 5, 3, 6, 2, 5, 1};
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
//去重
Arrays.stream(arr).distinct().boxed().collect(Collectors.toList());

2️⃣操作

一、常见算法

二分搜索,差分,前缀和

二、常见数据结构

一般会用到List构造
Stack myque = new LinkedList<>();

入栈:push方法,是push到最前面=addFirst

出栈:pop方法,是pop最前面的=removeFirst

LinkedList<Integer> array=new LinkedList<>();
	array.push(3);//321
    array.pop();//21

队列: Queue myque = new LinkedList<>();

入队:add(add=addLast)

出队:poll removeFirst

    array.add(3);//123
    array.removeFirst();//23

双端队列 Dequeue myque = new LinkedList<>();

三、排序

  1. Arrays.sort(a); 升序
  2. 自定义排序
    降序:
    public static void sort(T[] a,int fromIndex, int toIndex, Comparator<? super T> c)
    或重写该类的compareTo()方法,使其按照从小到大顺序排序
  3. 使用PriorityQueue优先队列
    .push() 插入一个元素
    .pop() 删除队头优先
    .peek() 查看队头
// 最小优先队列,直接 return o1.compareTo(o2);
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>(){
 @Override
 public int compare(Integer o1, Integer o2){
 return o1 < o2 ? -1 : 1;
 /* return o1.compare(o2); */
 }
});
// 最大优先队列,则反过来 return o2.compareTo(o1);

四、字符串常见方法

ccf第三题一般会用到

3️⃣输出

print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后。
println 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始。
printf是格式化输出的形式。

小技巧:

  • 输出结果放到res数组
  • 多个参数,规格化的输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值