当前位置: 代码迷 >> 综合 >> 蓝桥杯31天冲刺 Day7
  详细解决方案

蓝桥杯31天冲刺 Day7

热度:6   发布时间:2023-11-27 09:36:54.0

蓝桥杯31天冲刺 Day7

    • 相乘
    • 空间
    • 发现环
      • 拓扑排序
      • 题解

相乘

链接: 相乘.
在这里插入图片描述
题目很简单,直接枚举就好

public class 相乘 {
    public static void main(String[] args) {
    // TODO Auto-generated method stublong x = 2L;long n = 1000000007L;boolean flag = true;while(flag) {
    if(x*2021%n == 999999999) {
    System.out.println(x);flag = false;}x++;}}}

空间

链接: 空间.
在这里插入图片描述

内存单位换算
1 byte (B 字节) = 8 bits (b 比特位)
1 KB = 1024 (2^10) byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB

根据上述的单位换算就可以很好地解决这一问题了

import java.util.*;
public class 空间 {
    public static void main(String[] args) {
    // TODO Auto-generated method stublong bit =0L;bit=(long) (256*Math.pow(2, 10)*Math.pow(2, 10)*Math.pow(2, 3));long res = bit/32;System.out.println(res)}}

发现环

拓扑排序

在解决这道题之前,要先弄清拓扑排序的原理和实现方法,这里,我拿 力扣210. 课程表 II这题举例
在这里插入图片描述
拓扑排序可以有效地根据先后顺序,来对有向图进行排序。还有很重要的一点是:它可以有效判断图中是否有环存在
先简单说一下拓扑排序的思路吧

如下,是一个有向图
在这里插入图片描述

拓扑排序大致思路就是:找到入度为0的结点,再去掉它对应出度的箭头。
如上图,就是先找一个入度为0的结点,也就是4,再去掉它出度对应的一条边:
在这里插入图片描述
此时我们可以看到,找不出来入度为0的结点了,也就证明:图中有环

相反,如果一直这样进行下去,一直能找到入度为0的结点,也就证明图中没有环

依照这个原理,我们可以进行具体的代码实现了

选用的数据结构
怎样实现重复查找入度为0的结点呢?

解决这一问题使用while循环+队列的方式就再合适不过了
方法与层序遍历二叉树的方法相似

实现过程
代码实现,详细的思路已经注释出来了:

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
    //返回的结果int[] res = new int[numCourses];//存储对应课程的出度指向的课程List<Integer>[] beforeCorses = new List[numCourses];for(int i =0;i<numCourses;i++){
    beforeCorses[i] = new ArrayList<>();}//记录入度int[] cnt = new int[numCourses];//遍历给出的数据,记下每个元素的入度和对应的出度for(int[] a : prerequisites){
    int after = a[0];int before = a[1];beforeCorses[before].add(after);cnt[after]++;}//创建拓扑排序的队列Queue<Integer> queue = new LinkedList<>();//找出入度为0的元素并入队for(int i =0;i<numCourses;i++){
    if(cnt[i]==0){
    queue.offer(i);}}//辅助指针,用来将数据放入resint index = 0;//开始循环进行拓扑排序while(!queue.isEmpty()){
    int i=queue.poll();res[index] = i;index++;for(int l : beforeCorses[i]){
    cnt[l]--;if(cnt[l] == 0)queue.offer(l);}}if(numCourses!=index){
    return new int[0];}return res;}
}

题解

在这里插入图片描述
题解明天更~~(狗头