java算法编程tips

1.TreeSet

import java.util.*;

public class huawei {

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            //即可以空格分割,也可以换行分割
            int num = sc.nextInt();
          
            //有序无重复的集合,在要求输出不重复且从大到小排列时可以使用
            TreeSet<Integer> set = new TreeSet<Integer>();
            for(int i = 0 ; i < num ;i++){
                int curr = sc.nextInt();
                set.add(curr);
            }
            for(Integer i : set){
                System.out.println(i);
            }
        }
    }
}

2.substring

按下标切割数组,split按特定字符切割字符串成字符串数组。

s1=s2.substring(0,8);
s2=s2.substring(8); //8到字符串结尾

3. 字符串类型转化为整形

String str="16";
Integer.parseInt(str);

String str="A";
Integer.parseInt(str,16);//把16进制表示的A转化为10进制,结果为10

4.替换字符串的某些字符

String newStr=str.replace(" ","%20");//replace可以替换字符,或者其中的部分字符串
//而且替换后的字符串是一个新的字符串,旧字符串的值没有变化

5.char[] 型转化为string

不能用ch.toString(),显示的不是字符串本身,用下面的

new String(ch)

6.list.remove();

ArrayList<Integer> temp=new ArrayList<>(list);
res.add(temp); //直接把list加入另一个lists里面,再改变list里面的值,lists里面的值也会改变

//remove()这个方法是一个重载方法,即remove(int position)和remove(object object),唯一的区别是参数类型。要密切注意自己调用的remove()方法中的,传入的是int类型还是一个对象。
//使用remove(int position)的方法时,要先从大到小的位置移除,否则下标变化之后下面一次移除可能会数组越界。当然如果你知道具体的对象,直接移除remove(对象)更稳妥。
list.remove(new Integer(l));

ArrayList的remove方法是重载函数,需要注意
PriorityQueue的remove直接删除值很ok

  PriorityQueue<Integer> window = new PriorityQueue<>();
  window.add(3);
  window.remove(3);

7.类作为参数传入方法

java中都是值传递,类传入的时候传入的是这个类的一个地址副本,指向原来的类,使用地址副本改变地址里面的内容的操作会影响原来的类,如果对地址副本赋上new的对象的新地址,则不会对原来的对象造成影响。

private TreeNode ret;
private int cnt = 0;

//第一种可以正常运行
private void inOrder(TreeNode root, int k) {
    if (root == null || cnt >= k)
        return;
    inOrder(root.left, k);
    cnt++;
    if (cnt == k)
        ret = root;  //需要改变类的指向,就不要用参数传进来,而是全局变量
    inOrder(root.right, k);
}

8. PriorityQueue排序问题

priorityqueue遍历输出顺序不是排好顺序的,因为他插入的时候就不是完全排序,只保证了最顶端的值是最小的。

PriorityQueue<Integer> priorityQueue =new PriorityQueue<>();
       priorityQueue.add(1);
       priorityQueue.add(3);
       priorityQueue.add(2);
       for (int i:priorityQueue){
             System.out.println(i);
       }
输出:132

9. 将一个有向图的二维数组变为邻接链表数组

        int prerequisites[][]={{0,1},{0,3},{0,2},{1,4},{2,4},{3,4}};
        List<Integer>[] list = new List[numCourses];
        for (int i = 0; i < numCourses; i++) {
            list[i] = new ArrayList<>();
        }
        for (int[] a : prerequisites) {
            list[a[0]].add(a[1]);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值