拓扑排序-体育课测验(二)

news2024/12/23 13:46:23

目录

一、问题描述

二、解答思路

三、代码实现

四、刷题链接


一、问题描述

二、解答思路

        拓扑排序:

        1.设置一个入度数组,构建图的邻接矩阵的同时对入度数组进行初始化

        2.执行结点个数次的循环,每次循环都统计入度数组中的入度为0的结点P,加入返回值数组中,同时在入度数组中把该结点标记删除(这里我通过赋值-1来标记的),然后更新以该结点P为起点连接的结点的入度减1。

        3.执行完循环后查看入度数组内是否还存在入度不是-1的点,如果存在则证明有环,题目给出的序列不符合要求,返回空数组。

三、代码实现

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numProject int整型 
     * @param groups int整型ArrayList<ArrayList<>> 
     * @return int整型ArrayList
     */
    public ArrayList<Integer> findOrder (int numProject, ArrayList<ArrayList<Integer>> groups) {
        // 先构建有向图,然后判断是否有环
        ArrayList<Integer> resArr=new ArrayList<>();

        int[][] graph=new int[numProject][numProject];
        //存放入度
        int[] indegree=new int[numProject];
        //初始化有向图和入度
        for(int idx=0;idx<groups.size();idx++){
            ArrayList<Integer> tmpArr=groups.get(idx);
            graph[tmpArr.get(1)][tmpArr.get(0)]=1;
            indegree[tmpArr.get(0)]++;
        }
        for(int i=0;i<graph.length;i++){
            detectIndegree(indegree,graph,resArr);
        }
        //执行graph.length后再次检查resArr,如果不全是-1,就意味着出现了回路,返回空数组
        for(int i=0;i<indegree.length;i++){
            if(indegree[i]!=-1){
                resArr.clear();
            }
        }

        return resArr;
    }

    public boolean detectIndegree(int[] indegree,int[][] graph,ArrayList<Integer> resArr){
        boolean allzero=true;
        for(int i=0;i<graph.length;i++){
            if(indegree[i]!=0&&indegree[i]!=-1){
                allzero=false;
            }else if(indegree[i]==0){
                resArr.add(i);
                indegree[i]=-1;//标记删除
                //以i为前驱的结点入度-1
                for(int j=0;j<graph.length;j++){
                    if(graph[i][j]==1){
                        indegree[j]--;
                    }
                }
            }else{//已删除结点略过

            }
        }
        return allzero;
    }
    
}

四、刷题链接

体育课测验(二)_牛客题霸_牛客网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1860533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何以管理员身份运行CMD?

好久没更新博客了&#xff0c;今天在日常使用中遇到了一个问题&#xff0c;顺便记录下来。 据说国内的谷歌浏览器 Chrome 可以自动升级了&#xff0c;终于不用每次都自己跑去官网下载最新版本&#xff0c;然后安装迁移&#xff0c;重复劳动。下一篇讲如何讲迁移 Chrome&#x…

面试-java并发与多线程的部分函数

1.sleep和wait的区别 基本的差别&#xff1a; Sleep是Thread的方法。Wait是object方法。Wait不传参&#xff0c;最终也是调用wait(native)的传参方法。 Sleep方法可以在任何地方使用。 Wait方法只能在synchronized方法或synchronized方法块中使用。 最主要的本质区别&#xf…

pdf压缩,pdf压缩在线,pdf文件太大怎么变小

在数字化时代&#xff0c;PDF文档因其跨平台、保持原样、易于阅读和打印等特点&#xff0c;成为了我们日常工作和生活中不可或缺的一部分。然而&#xff0c;随着PDF文件的不断累积&#xff0c;存储空间逐渐变得紧张&#xff0c;特别是在处理大量大型PDF文件时&#xff0c;如何有…

qlv格式转换成mp4格式,qlv转换成mp4格式软件工具转换器

在当今的互联网时代&#xff0c;视频格式转换已成为我们日常生活中的一项常见任务。其中&#xff0c;qlv转MP4的需求尤为突出&#xff0c;本文将详细介绍qlv转MP4的几种方法&#xff0c;帮助大家转换视频格式&#xff0c;我们一起来看下。 方法一&#xff1a; 1、使用 "小…

突发!OpenAI停止不支持国家API,7月9日开始执行

6月25日凌晨&#xff0c;有部分开发者收到了OpenAI的信&#xff0c;“根据数据显示&#xff0c;你的组织有来自OpenAl目前不支持的地区的API流量。从7月9日起&#xff0c;将采取额外措施&#xff0c;停止来自不在OpenAI支持的国家、地区名单上的API使用。” 但这位网友表示&am…

如何申请免费SSL证书以消除访问网站显示连接不安全提醒

在当今互联网时代&#xff0c;网络安全已成为一个不可忽视的问题。当用户浏览一些网站时&#xff0c;有时会看到浏览器地址栏出现“不安全”的提示&#xff0c;这意味着该网站没有安装SSL证书&#xff0c;数据传输可能存在风险。那么&#xff0c;如何消除这种不安全提醒&#x…

ONLYOFFICE 桌面编辑器 8.1全新发布,更强大的编辑工具

ONLYOFFICE 8.1 一、什么是ONLYOFFICE&#xff1f;二、怎么安装 ONLYOFFICE 8.1三、主要功能介绍四、总结 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面的文档、表格和演示文稿编辑解决方案。它集成了文字处理、电子表格和演…

webstorm无法识别@路径的问题,左键无法跳转

在项目根目录下创建 webstorm.config.js use strict; const webpackConfig require(vue/cli-service/webpack.config.js); module.exports webpackConfig;webstorm设置里找到以下位置&#xff0c;引入新建的 webstorm.config.js即可&#xff0c;不生效把webstorm重启一下

LED显示屏的点间距越小越好吗

引言 在LED显示屏市场日趋成熟的同时&#xff0c;小间距显示屏成为了许多用户的首选。然而&#xff0c;点间距真的是越小越好吗&#xff1f;本文将探讨这一问题&#xff0c;并提供全面的选购指南。 点间距&#xff1a;并非越小越好 小间距显示屏因其精细的显示效果而备受青睐。…

推荐一款好用的编辑工具——onlyoffice桌面编辑器8.1

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 &#x1f525;前言&#x1f680;版本更新概览&#x1f697;文档编辑PDF编辑器…

Vue - HTML基础学习

一、元素及属性 1.元素 <p>我是一级标题</p>2.嵌套元素 把元素放到其他元素之中——这被称作嵌套。 <p>我是<strong>一级</strong>标题</p>3.块级元素 块级元素在页面中以块的形式展现&#xff0c;会换行&#xff0c;可嵌套内联元素。 …

掌握Python多线程,这些技巧你必须知道!

更多Python学习内容&#xff1a;ipengtao.com 多线程是一种能够并发执行代码的方法&#xff0c;可以提高程序的执行效率和响应速度。本文将详细介绍 Python 中多线程的概念、使用场景、基本用法以及实际应用&#xff0c;可以更好地掌握多线程编程。 什么是多线程&#xff1f; 多…

排序算法的优劣,以及优化思路

文章目录 1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序5. 归并排序6. 堆排序应用案例&#xff1a;对一个随机生成的整数列表进行排序基础快速排序快速排序优化&#xff1a;三数取中法 性能测试非递归快速排序实现基础归并排序归并排序的空间优化尝试自底向上归并排序实现堆排…

深圳比创达电子EMC|EMI电磁干扰行业:提升电子产品质量的关键

随着电子技术的飞速发展&#xff0c;电磁干扰&#xff08;EMI&#xff09;问题日益凸显&#xff0c;成为影响电子产品性能和市场竞争力的重要因素。 一、EMI电磁干扰行业的概述 电磁干扰&#xff0c;即电子设备在运行过程中产生的电磁波对其他设备或系统产生的干扰。这种干扰…

基于决策树的旋转机械故障诊断(Python)

前置文章&#xff1a; 将一维机械振动信号构造为训练集和测试集&#xff08;Python&#xff09; https://mp.weixin.qq.com/s/DTKjBo6_WAQ7bUPZEdB1TA 旋转机械振动信号特征提取&#xff08;Python&#xff09; https://mp.weixin.qq.com/s/VwvzTzE-pacxqb9rs8hEVw import…

AI大模型的制造业场景,一文读懂

摘要 AI大模型是通用人工智能发展的重要里程碑。中央会议关于人工智能发展提出三个第一次&#xff1a;第一次提出“通用人工智能”&#xff0c;第一次提出“产业智能化”&#xff0c;第一次提出“把握人工智能等新科技革命浪潮”。 这一轮AI所体现“革命性”特征&#xff0c;不…

防止多次点击,vue的按钮上做简易的防抖节流处理

话不多说,上个视频,看看是不是你要的效果 防抖节流 1.创建一个directive.js // directive.js export default {install(Vue) {// 防重复点击(指令实现)Vue.directive(repeatClick, {inserted(el, binding) {el.addEventListener(click, () > {if (!el.disabled) {el.disabl…

利用LabVIEW和机器学习实现无规律物体识别

针对变化无规律的物体识别&#xff0c;LabVIEW结合机器学习算法提供了一种高效的解决方案。介绍如何使用LabVIEW编程实现此功能&#xff0c;包括所需工具包、算法选择和实现步骤&#xff0c;帮助开发者在无规律的复杂环境中实现高精度的物体识别。 1. 项目概述 无规律物体的识…

YOLOv8模型代码学习

1.参考文献 链接1 2.网络模型解析 2.1卷积神经单元&#xff08;conv.py&#xff09; 在该文件中定义了yolov8网络中的卷积神经单元&#xff0c;位置如图所示。 def autopad(k, pNone, d1): # kernel(卷积核), padding(填充), dilation(扩张)"""Pad to same…

PLSQL下ORA-00904:

plsql下查看执行计划报错:ORA-00904:“OTHER_XML”:标识符无效 解决办法: 1.报错的用户登录到sqlplus,执行以下命令: sql> drop table PLAN_TABLE;2.创建表: sql> ?/rdbms/admin/utlxplan.sql; Table created.重新登录plsql按F5选择text: 报错问题解决.