leetcode 2360. 圖中的最長環 困難

給你一個?n?個節點的?有向圖?,節點編號為?0?到?n - 1?,其中每個節點?至多?有一條出邊。

圖用一個大小為?n?下標從?0?開始的數組?edges?表示,節點?i?到節點?edges[i]?之間有一條有向邊。如果節點?i?沒有出邊,那么?edges[i] == -1?。

請你返回圖中的?最長?環,如果沒有任何環,請返回?-1?。

一個環指的是起點和終點是?同一個?節點的路徑。

示例 1:

輸入:edges = [3,3,4,2,3]
輸出去:3
解釋:圖中的最長環是:2 -> 4 -> 3 -> 2 。
這個環的長度為 3 ,所以返回 3 。

示例 2:

輸入:edges = [2,-1,3,1]
輸出:-1
解釋:圖中沒有任何環。

提示:

  • n == edges.length
  • 2 <= n <= 10^5
  • -1 <= edges[i] < n
  • edges[i] != i

分析:由于每個節點至多有一個出邊,因此每個節點最多在一個環上。對每個節點進行dfs,如果dfs時遇到的節點,是這次dfs中出現過的節點,可以判定這次dfs中碰到了環,并且當前碰到的節點一定在環上。從這個節點開始dfs,可以得到這個環的長度。對每個沒有遍歷到的節點都進行dfs后,保留最大環長度即可。

int getans(int *edges,int flag[],int edgesSize,int index)
{if(index==-1)return -1000000000;else if(!flag[index]){flag[index]=1;return getans(edges,flag,edgesSize,edges[index])+1;}else return 0;
}int dfs(int *edges,int flag[],int edgesSize,int index,int temp_flag[])
{//printf("index=%d\n",index);if(index==-1)return -1;else if(!flag[index]&&(!temp_flag[index])){flag[index]=temp_flag[index]=1;return dfs(edges,flag,edgesSize,edges[index],temp_flag);}else if(flag[index]&&temp_flag[index])return index;return -1;
}int longestCycle(int* edges, int edgesSize) {int cnt=0,l=0,ans=-1;int flag[edgesSize+5];memset(flag,0,sizeof(flag));for(int i=0;i<edgesSize;++i){if(!flag[i]){int temp_flag[edgesSize+4];memset(temp_flag,0,sizeof(temp_flag));cnt=dfs(edges,flag,edgesSize,i,temp_flag);if(cnt>=0){memset(temp_flag,0,sizeof(temp_flag));//printf("i=%d cnt=%d ",i,cnt);int temp=getans(edges,temp_flag,edgesSize,cnt);//printf("temp=%d ans=%d\n",temp,ans);ans=fmax(ans,temp);}}}return ans;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/74127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/74127.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/74127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PySpur: AI 智能體可視化開發平臺

GitHub&#xff1a;https://github.com/PySpur-Dev/pyspur 更多AI開源軟件&#xff1a;發現分享好用的AI工具、AI開源軟件、AI模型、AI變現 - 小眾AI PySpur是一個開源的輕量級可視化AI智能體工作流構建器&#xff0c;旨在簡化AI系統的開發流程。通過拖拽式界面&#xff0c;用戶…

vcpkg安裝及使用教程,以安裝matio庫解析mat文件為例

vcpkg安裝及使用教程,以安裝matio庫解析mat文件為例 1. vcpkg安裝2 安裝matio三方庫3 將三方庫集成到VS中3.1 全局集成3.2 集成到特定工程4 結語Vcpkg 是微軟開發的一款開源的 C/C++ 包管理工具,旨在簡化 C/C++ 項目依賴庫的安裝和管理。它支持跨平臺(Windows、Linux、macO…

LLM架構解析:NLP基礎(第一部分)—— 模型、核心技術與發展歷程全解析

本專欄深入探究從循環神經網絡&#xff08;RNN&#xff09;到Transformer等自然語言處理&#xff08;NLP&#xff09;模型的架構&#xff0c;以及基于這些模型構建的應用程序。 本系列文章內容&#xff1a; NLP自然語言處理基礎&#xff08;本文&#xff09;詞嵌入&#xff0…

【Rtklib入門指南】2. 使用RTKLIB GUI進行觀測數據分析

數據準備 下載2025年1月1日的香港CORS站數據和觀測星歷&#xff0c;詳情參照如下博客&#xff1a; 使用GAMP_GOOD進行hk數據下載教程-CSDN博客 分析工具 RTKLIB 2.4.3 demo5&#xff08;也可以選用RTKLIB2.4.2&#xff0c;但不建議使用RTKLIB2.4.3&#xff09; 分析流程 …

suse15 sp1使用華為云軟件源yum源zypper源

登錄suse15終端&#xff0c; cd /etc/zypp/repos.d/進入目錄后執行以下命令&#xff1a; zypper ar -fcg https://mirrors.huaweicloud.com/opensuse/distribution/leap/15.1/repo/oss HuaWeiCloud:15.1:OSS zypper ar -fcg https://mirrors.huaweicloud.com/opensuse/distribu…

首屏加載時間優化解決

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff08;juejin/csdn同名&#xff09; &#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 高德AMap專欄 &#xff0c;記錄一下平時學習在博客寫作中記錄&#xff0c;總結出的一些開發技巧?。 感…

Sentinel[超詳細講解]-1

定義一系列 規則 &#x1f47a;&#xff0c;對資源進行 保護 &#x1f47a;&#xff0c; 如果違反的了規則&#xff0c;則拋出異常&#xff0c;看是否有fallback兜底處理&#xff0c;如果沒有則直接返回異常信息&#x1f60e; 1. 快速入門 1.1 引入 Sentinel 依賴 <depend…

02-Docker 使用

docker:快速構建、運行、管理應用的工具,可以幫助我們下載應用鏡像,創建并運行鏡像的容器,從而快速部署應用 1、部署mysql 先停掉虛擬機中的MySQL,確保你的虛擬機已經安裝Docker,且網絡開通的情況下,執行下面命令即可安裝MySQL(注意:若服務器上已經有mysql 占用了330…

@DeclareParents 注解實現接口功能增強:Spring中通過接口引入實現功能增強的完整示例

以下是Spring中通過接口引入實現功能增強的完整示例&#xff1a; // 1. 目標接口及實現類 package com.example;public interface Service {void doSomething(); }Component class ServiceImp implements Service {Overridepublic void doSomething() {System.out.println(&qu…

HTML中數字和字母不換行顯示

HTML中數字和字母不換行顯示的默認行為及如何通過CSS的word-wrap和word-break屬性進行調整。 在HTML中標簽中的數字和字母默認是不換行的&#xff0c;如果要將他們換行&#xff0c;在CSS中添加”word-wrap: break-word;” 即可解決 語法&#xff1a;word-wrap: normal|break-w…

Git團隊開發命令總結

簡易Git工作流 myname: 團隊成員個人分支dev: 團隊公共分支 個人獨立分支開發 同步最新的【dev公共分支】到本地。【重要】基于最新的【dev公共分支】&#xff0c;創建【個人功能開發分支】。在此基礎上開發。【個人功能開發分支】開發完成&#xff0c;推送到遠程庫。如果【…

Python人工智能大模型入門教程:從零構建高性能預測模型

引言&#xff1a;AI大模型時代的技術革命 在AlphaGo戰勝人類棋手的里程碑事件后&#xff0c;人工智能技術進入爆發式發展階段。本教程將帶您從零開始&#xff0c;使用Python構建一個工業級神經網絡模型。通過本教程&#xff0c;您不僅能掌握GPU加速訓練、混合精度計算等前沿技…

python-leetcode 61.N皇后

題目&#xff1a; 按照國際象棋的規則&#xff0c;皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。 n 皇后問題 研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊 給你一個整數 n &#xff0c;返回所有不同的 n 皇后問題 的解…

Mybatis_Plus中的常用注解

目錄 1、TableName TableId TableId的type屬性 TableField 1、TableName 經過以上的測試&#xff0c;在使用MyBatis-Plus實現基本的CRUD時&#xff0c;我們并沒有指定要操作的表&#xff0c;只是在 Mapper接口繼承BaseMapper時&#xff0c;設置了泛型User&#xff0c;而操…

JavaScript函數知識點總結

JavaScript函數是一種可重復使用的代碼塊,它接受輸入值(參數)、執行特定任務,并返回輸出值。 1. 聲明函數 function greet(name) {return "Hello, " + name + "!"; }console.log(greet("Alice")); // 輸出: Hello, Alice! console.log( t…

分布式計算Ray框架面試題及參考答案

目錄 簡述 Ray 的架構設計核心組件及其協作流程 全局控制存儲(GCS)在 Ray 中的作用是什么?如何實現高可用性? 對比 Ray 的任務(Task)與 Actor 模型,說明各自適用場景 解釋 Ray 的 Object Store 如何實現跨節點數據共享與零拷貝傳輸 Ray 的分布式調度器如何實現毫秒級…

GitHub熱門RAG框架:讓大語言模型更智慧

檢索增強生成(RAG):提升大型語言模型能力的全新思路 隨著人工智能應用的不斷深入發展,如何讓大型語言模型(LLM)具備更強的上下文理解和實時響應能力成為了關鍵問題。檢索增強生成(Retrieval-Augmented Generation,RAG)正是在這一背景下應運而生的技術,它巧妙地結合了…

HTTP協議講解

概念&#xff1a; Hyper Text Transfer Protocol 超文本傳輸協議&#xff0c;規定了瀏覽器和服務器之間的數據傳輸規則 特點 基于TCP協議&#xff0c;面向連接&#xff0c;安全基于請求-響應模型的&#xff0c;一次請求對應一次響應無狀態的&#xff0c;對于事物沒有記憶能力…

全國節能宣傳周線上知識競賽

線上知識競賽|節能降碳知識知多少 引言 全國節能宣傳周舉辦的主題是“綠色低碳&#xff0c;節能先行”。國家節能中心會同相關單位共同打造了一款線上知識競賽小程序&#xff0c;學習節能知識&#xff0c;爭做節能達人。 1.小程序規則&#xff1a; 體力規則&#xff1a;每位…

【區塊鏈安全 | 第十八篇】類型之引用類型(二)

文章目錄 引用類型數組切片結構體 引用類型 數組切片 數組切片是對數組中連續部分的一個視圖。它的語法為 x[start:end]&#xff0c;其中 start 和 end 是表達式&#xff0c;結果類型為 uint256&#xff08;或者可以隱式轉換為 uint256&#xff09;。切片的第一個元素是 x[st…