Java教程

java语言写题常用

本文主要是介绍java语言写题常用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

map排序

        //这里将map.entrySet()转换成list
        List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
        //然后通过比较器来实现排序
        Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {
            //升序排序
            public int compare(Map.Entry<Integer, Integer> o1,
                               Map.Entry<Integer, Integer> o2) {
                if(o1.getKey() > o2.getKey()){
                    return 1;
                }else if(o1.getKey() < o2.getKey()){
                    return 0;
                }else{
                    return o2.getValue() - o1.getValue();
                }
            }
        });
        for(Map.Entry<Integer,Integer> m:list){
            System.out.println(m.getKey()+":"+m.getValue());
        }
        return null;
//=======================分割线=======================
        Map<Integer , Integer> map = new TreeMap<>();
        //自定义比较器
        Comparator<Map.Entry<Integer, Integer>> valCmp = new Comparator<Map.Entry<Integer,Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o2.getValue()-o1.getValue();
            }
        };

        for(int i = 0 ; i < nums.length ; i++){
            if(map.containsKey(nums[i])){
                map.put(map.get(nums[i]) , map.get(nums[i]+1));
            }else{
                map.put(nums[i] , 1);
            }
        }
        //将map转成List,map的一组key,value对应list一个存储空间
        List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet()); //传入maps实体
        Collections.sort(list,valCmp); // 注意此处Collections 是java.util包下面的,传入List和自定义的valCmp比较器
        int[] res = new int[k];
        for(int i = 0 ; i < k ; i++) {
            res[i] = list.get(i).getValue();
        }
        return res;

数组排序

  Arrays.sort(people, (int[] o1, int[] o2) ->{
            if(o2[0] == o1[0]){
                return o2[1] - o1[1];
            }else{
                return o1[0] - o2[0];
            }
 });

数组赋值

 Arrays.fill(f,Integer.MAX_VALUE);

Map构建(不要再先判断有无值再put了)

 public int findLHS(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i : nums) map.put(i, map.getOrDefault(i, 0) + 1);
        int ans = 0;
        for (int i : nums) {
            if (map.containsKey(i - 1)) {
                ans = Math.max(ans, map.get(i) + map.get(i - 1));
            }
        }
        return ans;
   
    }

数组排序2(由大到小)(不建议使用,但是我记得有面经问过这种流的使用)

        //数组元素转换为数值流
        IntStream stream = Arrays.stream(nums);
        //流中元素全部装箱
        Stream<Integer> st = stream.boxed();
        //将流转换为数组
        Integer[] num = st.toArray(Integer[]::new);
        Arrays.sort(num , Collections.reverseOrder());

DFS常用

    List<String> res = new ArrayList<>();
    LinkedList<String> path = new LinkedList<>();
    public List<String> binaryTreePaths(TreeNode root) {
        dfs(root);
        return res;
    }
    public void dfs(TreeNode root){
        if(root == null)
            return ; 
        path.add(String.valueOf(root.val));
        if(root.left == null && root.right == null) {
            res.add(String.join("->", path));
        }
        dfs(root.left);
        dfs(root.right);
        path.removeLast();
    }

寻找环/寻找相同元素(其实就想记录下数组模拟链表的例子)

    /**
     * 通过寻找链表中环的方式 时间复杂度为O(n)
     * @param nums
     * @return
     */
    public int findDuplicate(int[] nums) {
         int a = 0;
         int b = 0;
         while (true){
             a = nums[a];
             b = nums[nums[b]];
             if (a == b){
                 a = 0;
                 while (a != b){
                     a = nums[a];
                     b = nums[b];
                 }
                 return a;
             }
         }
    }

层序遍历二叉树顺便记录每层节点数量

    public int findBottomLeftValue(TreeNode root) {
        TreeNode res = new TreeNode();
        Queue<TreeNode> queue = new LinkedList();
        queue.add(root);
        int size = 0 ;
        while (!queue.isEmpty()){
            int num = 0;
            for(int i = 0; i < size; i++){
                TreeNode node = queue.poll();
                if(i == 0)
                    res = node;
                if(node.left != null ){
                    num ++;
                    queue.add(node.left);
                }

                if(node.right != null){
                    num ++;
                    queue.add(node.right);
                }
            }
            size = num;
        }
        return res.val;
    }

未完待补充

这篇关于java语言写题常用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!