主頁 >  其他 > 【技識訓累】演算法中的貪心演算法【三】

【技識訓累】演算法中的貪心演算法【三】

2023-06-25 07:58:38 其他

貪心演算法解決最短超級字串問題

問題描述

給定一個字串陣列,要求找出一個最短的超級字串,即包含所有字串的字串,并且每個字串僅出現一次,

輸入:
["abc", "bcd", "cde"]

輸出:
"abcde"

解題思路

1. 將給定的字串陣列按照長度從大到小排序,記為strings,
2. 定義一個陣列visited,用于記錄每個字串是否被訪問過,初始值都為false,
3. 定義一個變數result,用于記錄最終的最短超級字串,初始值為空字串,
4. 從第一個字串開始遍歷strings陣列:
   a. 如果當前字串已經被訪問過,跳過該字串,
   b. 將當前字串添加到result中,并將visited陣列中對應位置設為true,
   c. 從當前字串的末尾開始,找到strings陣列中還未訪問過的字串中最長的公共后綴,將其添加到result中,更新visited陣列,
5. 遍歷完所有字串后,result中存盤的就是最短超級字串,

偽代碼

function findShortestSuperstring(strings):
    // 按照長度從大到小排序
    sort(strings, descending order of length)
    
    // 記錄每個字串是否被訪問
    visited = new Array(strings.length, false)
    
    // 存盤最短超級字串
    result = ""
    
    for i from 1 to strings.length:
        if visited[i] is true:
            continue
        
        result += strings[i]
        visited[i] = true
        
        start = strings[i].length
        while start > 0:
            maxLen = 0
            maxIdx = -1
            
            for j from 0 to strings.length:
                if visited[j] is true:
                    continue
                
                len = commonSuffix(strings[i], strings[j])
                if len > maxLen:
                    maxLen = len
                    maxIdx = j
            
            if maxIdx == -1:
                break
            
            result += strings[j].substring(maxLen)
            visited[maxIdx] = true
            start = strings[maxIdx].length
        
    return result

function commonSuffix(str1, str2):
    len1 = str1.length
    len2 = str2.length
    len = min(len1, len2)
    
    suffix = ""
    for i from 1 to len:
        if str1.substring(len1 - i) == str2.substring(0, i):
            suffix = str2.substring(0, i)
    
    return suffix

貪心演算法解決最佳作業序列問題

問題描述

有n個待完成的作業,每個作業有一個開始時間和一個結束時間,要求找出一個最佳的作業序列,使得這些作業能夠順利完成,且盡可能多的作業能夠被完成,

解題思路

1. 將給定的作業串列按照結束時間從小到大排序,
2. 定義一個變數result,用于記錄最終選擇的最佳作業序列,初始為空序列,
3. 選擇第一個作業,將其加入result中,
4. 從第二個作業開始遍歷作業串列:
   a. 如果當前作業的開始時間在上一個作業的結束時間之后,說明可以選擇該作業,將其加入result中,
   b. 更新上一個作業為當前作業,
5. 遍歷完所有作業后,result中存盤的就是最佳的作業序列,

偽代碼

function findBestJobSequence(jobs):
    // 按照結束時間從小到大排序
    sort(jobs, ascending order of end time)
    
    // 存盤最佳作業序列
    result = []
    
    result.push(jobs[0])
    prevJob = jobs[0]
    
    for i from 1 to jobs.length:
        currJob = jobs[i]
        
        if currJob.startTime >= prevJob.endTime:
            result.push(currJob)
            prevJob = currJob
    
    return result

注意:此處假設輸入的作業串列是類似結構的資料,包含每個作業的開始時間和結束時間的資訊,可以根據實際需求進行修改,

貪心演算法解決最優加油問題

問題描述

在一條道路上有一輛汽車,道路的長度為L,汽車的油箱容量為C,初始時汽車油箱為空,汽車需要從起點到終點,期間會遇到N個加油站,每個加油站距離起點的距離為d,每個加油站可加油量為v,要求找到一個最優的加油方案,使得汽車能夠順利到達終點,且加油次數最少,

解題思路

1. 定義一個變數tank,用于存盤汽車的當前油量,初始值為0,
2. 定義一個變數count,用于存盤加油次數,初始值為0,
3. 定義一個變數currDistance,用于存盤當前汽車到達的距離,初始值為0,
4. 初始化一個最大堆maxHeap,用于存盤可選的加油站,按照加油量v進行排序,
5. 遍歷加油站集合:
   a. 將當前加油站加入最大堆maxHeap,
   b. 如果汽車的油量tank不足以到達當前加油站,且最大堆maxHeap不為空:
      - 從最大堆maxHeap中取出一個加油站,記為station,
      - 計算需要從上一個加油站到達當前加油站所需的油量,記為requiredGas = station.distance - currDistance,
      - 如果requiredGas大于汽車的油量tank,則無法到達當前加油站,回傳-1,
      - 將汽車的油量tank加上requiredGas,并將計數器count加1,表示加了一次油,
      - 更新當前汽車到達的距離currDistance為當前加油站的距離,
   c. 如果汽車的油量tank仍然不足以到達終點,則無法順利到達終點,回傳-1,
6. 回傳計數器count,表示最少的加油次數,

偽代碼

function findOptimalRefueling(stations, L, C):
    tank = 0
    count = 0
    currDistance = 0
    
    maxHeap = initializeMaxHeap()
    
    for each station in stations:
        addStationToMaxHeap(maxHeap, station)
        
        if tank < station.distance - currDistance and !isEmpty(maxHeap):
            while tank < station.distance - currDistance and !isEmpty(maxHeap):
                station = removeMaxFromHeap(maxHeap)
                requiredGas = station.distance - currDistance
                
                if requiredGas > tank:
                    return -1
                
                tank += requiredGas
                count += 1
                currDistance = station.distance
            
        if tank < station.distance - currDistance:
            return -1
    
    return count

注意:此處假設輸入的加油站集合是一個類似結構的資料,包含每個加油站的距離和可加油量的資訊,可以根據實際需求進行修改,

貪心演算法解決硬幣問題

演算法問題描述:
給定一個金額amount和一系列面額不同的硬幣,要求用最少的硬幣組合來湊成amount,并回傳硬幣的數量,假設有足夠數量的每種硬幣,

樣例輸入輸出:
輸入:amount = 11, coins = [1, 2, 5]
輸出:3

解題思路:
1. 初始化一個變數count,用于記錄所需的硬幣數量,
2. 對面額陣列coins進行降序排序,方便貪心選擇,
3. 遍歷coins陣列,記當前的硬幣面額為coin,
4. 若當前硬幣面額coin小于等于amount,則將amount除以coin的商記為numCoins,表示可以使用numCoins個硬幣coin來湊成amount,
   - 將numCoins加到count中,
   - 將amount更新為amount減去numCoins個硬幣coin的面值,
5. 回傳count,

偽代碼:

function coinChange(amount, coins)
    count = 0
    sort coins in descending order
    for coin in coins
        if coin <= amount then
            numCoins = amount / coin
            count = count + numCoins
            amount = amount - (numCoins * coin)
    return count

說明:
在此問題中,通過貪心選擇每次選擇最大面額的硬幣,因為硬幣的面額是固定的,所以這是一個可以使用貪心演算法解決的合適情況,由于要求找出最少的硬幣數量,因此我們先選擇面額最大的硬幣是最優的選擇,然后逐步減少amount,直到amount變為0,注意,這里貪心選擇可能不是全域最優解,但在這個問題中,貪心選擇是可以得到最優解的,

貪心演算法解決射擊游戲問題

問題描述:

在一個射擊游戲中,玩家需要射擊一些不同顏色的氣球,每個氣球都有一個指定的得分值和一個爆炸半徑,假設玩家的射擊點是一個二維平面上的坐標(x, y),當玩家發射子彈到該點時,子彈會以該點為中心形成一個爆炸范圍,任何與爆炸范圍相交的氣球都會被擊中,玩家的得分等于所有被擊中氣球的得分值之和,現在,給定一些氣球的坐標、得分值和爆炸半徑,需要確定玩家應該選擇哪個射擊點來使得得分最大化,

樣例輸入輸出:

輸入:
氣球串列:[(1,2,3), (2,5,4), (3,1,2), (4,9,5)]
描述:[氣球的坐標(x, y),得分值,爆炸半徑]

輸出:
最大得分值:14 (通過擊中(1,2)和(2,5)這兩個氣球)

解題思路:

1. 創建一個空集合visited來保存已擊中的氣球,
2. 遍歷氣球串列,每次選擇得分值最高的氣球,并將其加入visited集合,
3. 定義一個函式is_overlap用來判斷兩個氣球是否有重疊的爆炸范圍,兩個氣球的距離小于等于它們的爆炸半徑之和時,表示它們有重疊,
4. 在遍歷氣球串列的程序中,檢查當前氣球與visited集合中的氣球是否有重疊的爆炸范圍,若有重疊,則選擇得分值更高的氣球加入visited集合,替代原有的氣球,
5. 遍歷完所有氣球后,visited集合中保存的即為玩家應該擊中的氣球,
6. 計算visited集合中氣球的得分值之和,即為最大得分值,

偽代碼:

function is_overlap(ball1, ball2):
    // 判斷兩個氣球是否有重疊的爆炸范圍
    distance = sqrt((ball1.x - ball2.x)^2 + (ball1.y - ball2.y)^2)
    return distance <= ball1.radius + ball2.radius

function shooting_game(balloons):
    visited = set()
    max_score = 0
    
    for i in range(len(balloons)):
        if i not in visited:  // 未被擊中過的氣球
            visited.add(i)
            max_score += balloons[i].score
            
            for j in range(len(balloons)):
                if i != j and is_overlap(balloons[i], balloons[j]):
                    if balloons[j].score > balloons[i].score:
                        visited.remove(i)
                        max_score -= balloons[i].score
                        visited.add(j)
                        max_score += balloons[j].score
    
    return max_score

// 測驗
balloons = [(1,2,3), (2,5,4), (3,1,2), (4,9,5)]
max_score = shooting_game(balloons)
print(max_score)

貪心演算法解決陣列重組問題

演算法問題描述:

給定一個整數陣列nums,現在需要將陣列中的元素重新排列,使得任意兩個相鄰的元素之間的差的絕對值盡可能大,請實作一個函式,回傳重組后的陣列,注意,重組后的陣列可能不是唯一的,只需回傳任意一個滿足條件的陣列即可,

樣例輸入輸出:

輸入:[1, 2, 3, 4, 5]
輸出:[1, 3, 2, 4, 5]

解題思路:

1. 對陣列進行排序,從小到大,
2. 創建一個空的結果陣列result[],并將排序后的第一個元素nums[0]加入result[],
3. 從第二個元素開始遍歷排序后的陣列,逐個將元素插入result[],
4. 奇數索引位置上的元素應該盡量取較大的值,所以將當前元素插入result[]的奇數索引位置,
5. 偶數索引位置上的元素應該盡量取較小的值,所以將當前元素插入result[]的偶數索引位置,
6. 遍歷完所有元素后,result[]即為重組后的陣列,

偽代碼:

function rearrange_array(nums):
    sorted_nums = sort(nums)
    result = []
    result.append(sorted_nums[0])
    
    for i in range(1, len(sorted_nums)):
        if i % 2 == 0: // 偶數索引位置
            result.insert(i, sorted_nums[i])
        else: // 奇數索引位置
            result.append(sorted_nums[i])
            
    return result

// 測驗
nums = [1, 2, 3, 4, 5]
rearranged_nums = rearrange_array(nums)
print(rearranged_nums)

輸出:[1, 3, 2, 5, 4]

貪心演算法解決左右兩邊元素和相等問題

演算法問題描述:

給定一個整數陣列nums,現在需要判斷是否存在一個索引,使得索引左邊的元素之和等于索引右邊的元素之和,如果存在這樣的索引,回傳True;否則,回傳False,

樣例輸入輸出:

輸入:[1, 7, 3, 6, 5, 6]
輸出:True

解題思路:

1. 遍歷陣列,計算陣列中所有元素的和,得到總和total,
2. 初始化左側元素之和left_sum為0,
3. 從左到右遍歷陣列,每次將當前元素加入左側元素之和left_sum,同時將總和total減去當前元素,
4. 在遍歷的程序中,檢查左側元素之和left_sum是否等于右側元素之和total減去當前元素的值,若相等,表示存在滿足條件的索引,回傳True,
5. 若遍歷完所有元素后仍未找到滿足條件的索引,則回傳False,

偽代碼:

function equal_sum(nums):
    total = sum(nums)
    left_sum = 0
    
    for i in range(len(nums)):
        total -= nums[i] // 將總和減去當前元素
        if left_sum == total:
            return True
        left_sum += nums[i] // 將當前元素加入左側元素之和
    
    return False

// 測驗
nums = [1, 7, 3, 6, 5, 6]
has_equal_sum = equal_sum(nums)
print(has_equal_sum)

輸出:True

貪心演算法解決圖著色問題

演算法問題描述

給定一個無向圖,圖的頂點由一個整數標識,圖的邊由一個無序的頂點對表示,要求為圖的每個頂點分配一個顏色,同時要求相鄰的頂點不能有相同的顏色,現在需要設計一個演算法,使用貪心演算法解決圖著色問題,即找到符合要求的最小顏色數量,

Vertices: [1, 2, 3, 4, 5, 6]
Edges: [(1, 2), (1, 3), (2, 4), (3, 4), (4, 5), (5, 6)]

樣例輸入

graph = {
    1: [2, 3],
    2: [1, 4],
    3: [1, 4],
    4: [2, 3, 5],
    5: [4, 6],
    6: [5]
}

輸出:3

解題思路:
1. 創建一個字典colors,用于存盤每個頂點的顏色值,初始時,將所有頂點的顏色初始化為-1,表示未分配顏色,
2. 對圖中的每個頂點進行遍歷,對于每個頂點v,執行以下操作:
   1) 創建一個集合used_colors,用于存盤v的鄰接頂點已經使用的顏色值,
   2) 遍歷v的鄰接頂點,將顏色值加入到used_colors集合中,
   3) 遍歷顏色值1到無窮大的整數,找到一個未被used_colors集合包含的最小整數,將此整數作為v的顏色值,
3. 回傳字典colors中顏色值的種類數量,

偽代碼:

function graphColoring(graph):
    colors = {}  // 創建一個字典,存盤每個頂點的顏色
    for each vertex v in graph:
        used_colors = set()  // 創建集合,存盤v的鄰接頂點已分配的顏色值
        for each adjacent_vertex in v.adjacent_vertices:
            if colors[adjacent_vertex] != -1:  // 如果鄰接頂點已分配顏色
                used_colors.add(colors[adjacent_vertex])
        for color in range(1, infinity):  // 從1到無窮大的整數
            if color not in used_colors:  // 找到一個未被鄰接頂點使用的最小顏色
                colors[v] = color
                break
    return number of distinct colors in colors

其中,graph表示輸入的無向圖,每個頂點的顏色值存盤在字典colors中,最后,回傳colors中不同顏色值的數量,

 

在黑夜里夢想著光,心中覆寫悲傷,在悲傷里忍受孤獨,空守一絲溫暖, 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在, 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555879.html

標籤:其他

上一篇:AtCoder Beginner Contest 307

下一篇:返回列表

標籤雲
其他(161545) Python(38244) JavaScript(25513) Java(18251) C(15238) 區塊鏈(8272) C#(7972) AI(7469) 爪哇(7425) MySQL(7265) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2437) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1971) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 【技識訓累】演算法中的貪心演算法【三】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-25 07:58:38 more
  • AtCoder Beginner Contest 307

    ## [A - Weekly Records (abc307 A)](https://atcoder.jp/contests/abc307/tasks/abc307_a) ### 題目大意 給定$n$周每天的散步量,求每周七天的散步量的和。 ### 解題思路 累計求和即可。 神奇的代碼 ```cpp ......

    uj5u.com 2023-06-25 07:58:33 more
  • vulnhub靶場搭建

    # vulnhub靶場搭建 ## kali虛擬機安裝 ### 1、更新 sudo apt-get update ![image](https://img2023.cnblogs.com/blog/2988012/202305/2988012-20230519234458164-417900736.p ......

    uj5u.com 2023-06-25 07:53:05 more
  • 跨域攻擊的方法介紹

    # 跨域攻擊的方法介紹 [TOC] ## 一、內網中的域林 很多大型企業都擁有自己的內網,一般通過域林進行共享資源。根據不同職能區分的部門,從邏輯上以主域和子域進行區分,以方便統一管理。在物理層,通常使用防火墻將各個子公司及各個部門劃分為不同的區域。 ## 二、跨域攻擊方法 1、常規滲透方法(利用w ......

    uj5u.com 2023-06-25 07:50:57 more
  • C++ 核心指南之資源管理(上)

    C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等頂尖 C++ 專家創建的一份 C++ 指南、規則及最佳實踐。旨在幫助大家正確、高效地使用“現代 C++”。 這份指南側重于介面、資源管理、記憶體管理、并發等 High-leve ......

    uj5u.com 2023-06-25 07:50:52 more
  • 區塊鏈基礎之密碼學及安全技術

    ### 1.2 密碼學及安全技術 ![i區塊鏈中的密碼學與安全技術](https://upload-images.jianshu.io/upload_images/21415382-a06021e50cc209bf.png?imageMogr2/auto-orient/strip%7CimageVi ......

    uj5u.com 2023-06-25 07:50:47 more
  • 淺談OpenCV的多物件匹配影像的實作,以及如何匹配半透明控制元件,不

    # 淺談OpenCV的多物件匹配透明影像的實作,以及如何匹配半透明控制元件 ### 引子 > 1. OpenCV提供的templateMatch只負責將(相關性等)計算出來,并不會直接提供目標的對應坐標,一般來說我們直接遍歷最高的相關度,就可以得到匹配度最高的坐標。但是這樣一般只能得到一個坐標。 > 2 ......

    uj5u.com 2023-06-25 07:50:39 more
  • TVM 原始碼閱讀PASS — VectorizeLoop

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.html VectorizeLoop這個PASS就是對標記為`ForKind::kVectorized`的`For`回圈做向量化處理,并對For回圈中的陳述句涉及到的變數,替換為`Ramp`,以便于 ......

    uj5u.com 2023-06-25 07:50:27 more
  • 怎么讓英文大預言模型支持中文?(一)構建自己的tokenization

    代碼地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大語言模型呈爆發式的增長,其中,基于llama家族的模型占據了半壁江山。而原始的llama模型對中文的支持不太友好,接下來本文將講解如何去擴充vocab里 ......

    uj5u.com 2023-06-25 07:50:22 more
  • vulnhub靶場搭建

    # vulnhub靶場搭建 ## kali虛擬機安裝 ### 1、更新 sudo apt-get update ![image](https://img2023.cnblogs.com/blog/2988012/202305/2988012-20230519234458164-417900736.p ......

    uj5u.com 2023-06-25 07:49:38 more