Java算法代码模板整理 通用篇

导读:本篇文章讲解 Java算法代码模板整理 通用篇,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

常规代码模板

核心代码模式

ACM模式

map set 遍历

自定义比较器

建立大跟堆、小根堆


常规代码模板

核心代码模式

函数名,输入参数,输出参数类型都已经写好,只需要写函数体即可。

Java算法代码模板整理 通用篇

ACM模式

啥都没有,需要自己写

Java算法代码模板整理 通用篇

 这里提供一个模板,主要是读入示例,自己构建出输入参数,那么就可以转化为核心代码模式了,方便过渡。

读入大致是分为两类,数字和字符串。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);// 获取控制台对象
        int T = sc.nextInt();//如果一个示例有多组数据 T就是组数
        while(T-- >0){// 循环读入T组数据,处理后输出每组数据的结果
            int n = sc.nextInt();// 该示例中 需要先读取一个 n 表示接下来n个数是x数组
            int[] nums = new int[n];
            String[] strs = new String[n];
            for(int i = 0; i < n; ++i){
                nums[i] = sc.nextInt();
            }
            for(int i = 0; i < n; ++i){
                strs[i] = sc.nextLine();// nextLine()读取字符串
            }
            System.out.println(getResult(nums,strs));
        }
    }

    private static int getResult(int[] nums, String[] strs) {
        //核心代码模式
        // write your code here
        return -1;
    }

}

Map Set 遍历

/*
* 测试List遍历的方式
* */
public class TestArrayList {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");

        //方式一,for循环遍历,通过get()方法
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }


        //方式四,增强for循环  foreach
        for (String str : list) {
            System.out.println(str);
        }

        //方式五,转化数组
           String[] a = new String[3];
        String[] aa = list.toArray(a);
        for (int i = 0; i < aa.length; i++) {
            System.out.println(aa[i]);
        }
    }
}
————————————————
版权声明:本文为CSDN博主「yuyinghe0612」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yuyinghe0612/article/details/80549443
public class TestHashMap {
    public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();
        map.put("a", "2000");
        map.put("b", "3000");

        //方式一、在for-each循环中使用entrySet来遍历
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println("key=" +key+"  value="+value);
        }

        //方式二、在for-each循环中通过键找值遍历
        for (String key : map.keySet()) {
            System.out.println("key=" + key+"  value="+map.get(key));
        }

        //只打印键值keys
        for (String key : map.keySet()) {
            System.out.println("key=" + key);
        }
        //只打印values
        for (String value : map.values()) {
            System.out.println("value=" + value);
        }


    }
}
————————————————
版权声明:本文为CSDN博主「yuyinghe0612」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yuyinghe0612/article/details/80549443

map不能用增强for循环。

自定义比较器

算法题中会出现可以使用库函数sort 的情景,不过往往不是简单的sort,在java中

sort默认是升序,如何实现降序呢? 如果现在是对nums(int[2]) 中的第0列数据升序,在此基础上第1列数据降序,又怎么做呢?
 

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

/**
 * @Description
 * @create 2022/2/14 - 21:27
 */
public class compareDemo {
    public static void main(String[] args) {
        int[][] nums = new int[3][2];
        nums[0][0] = 12;
        nums[0][1] = 0;
        nums[1][0] = 15;
        nums[1][1] = 50;
        nums[2][0] = 15;
        nums[2][1] = 90;
        for (int[] num : nums) {
            System.out.println(num[0] + " " + num[1]);
        }
        System.out.println("=========排序后==========");
        Arrays.sort(nums,new Comparator<int[]>(){
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0]!=o2[0]){
                    return o1[0] - o2[0];// 升序
                }else{
                    return o2[1] - o1[1];// 降序
                }
            }
        });
        for (int[] num : nums) {
            System.out.println(num[0] + " " + num[1]);
        }

        Integer[] nums1 = new Integer[]{5,7,8,2,3};
        Arrays.sort(nums1);// 升序
        for (int i : nums1) {
            System.out.println(i);
        }
        Arrays.sort(nums1, Collections.reverseOrder());// 降序
        for (int i : nums1) {
            System.out.println(i);
        }
        Arrays.sort(nums1,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1; // 降序
            }
        });
        for (int i : nums1) {
            System.out.println(i);
        }
    }
}

sort 自定义比较器不能对 int[] 等基本数据类型的数组进行排序,只适用于object[]。

所以对于int[] 要不然转化为引用数据类型的数组,再用库函数,要不然自己写快排之类的算法。

建立大跟堆、小根堆

import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * @Description
 * @create 2022/2/14 - 21:58
 */
public class heapDemo {
    public static void main(String[] args) {

        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;//小根堆
            }
        });
        pq.add(1); pq.add(5); pq.add(10);
        PriorityQueue<Integer> pq2 = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;//大根堆
            }
        });
        pq2.add(1); pq2.add(5); pq2.add(10);

        System.out.println(pq.peek());
        System.out.println(pq2.peek());

        int[][] nums = new int[3][2];
        nums[0][0] = 12;
        nums[0][1] = 0;
        nums[1][0] = 15;
        nums[1][1] = 50;
        nums[2][0] = 15;
        nums[2][1] = 90;
        for (int[] num : nums) {
            System.out.println(num[0] + " " + num[1]);
        }
        PriorityQueue<int[]> pqArr = new PriorityQueue<>(new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0]!=o2[0]){
                    return o1[0] - o2[0];// 升序
                }else{
                    return o2[1] - o1[1];// 降序
                }
            }
        });
        pqArr.add(nums[0]);
        pqArr.add(nums[1]);
        pqArr.add(nums[2]);
        while(!pqArr.isEmpty()) {
            System.out.println(pqArr.peek()[0] + " " + pqArr.poll()[1]);
        }
    }
}

Java中List, Integer[], int[]的相互转换

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92881.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!