久久久精品2019中文字幕神马_欧美亚洲一区三区_欧美大人香蕉在线_精品88久久久久88久久久_中文字幕一区二区三区在线播放 _精品国产一区二区三区久久影院_欧洲av在线精品_粉嫩av一区二区三区_亚洲欧美一区二区三区极速播放_国产亚洲精品久久

首頁 > 娛樂頻道

【技術積累】算法中的貪心算法【三】 天天關注

來源:博客園 時間:2023-06-25 10:00:58

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

問題描述


(資料圖片)

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

輸入:["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 resultfunction 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.radiusfunction 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中不同顏色值的數量。

相關稿件

【技術積累】算法中的貪心算法【三】 天天關注

從“三代種桃人”看現代農業怎么干——算好加減法 做好“一二三”|每日時訊

商圈夏日市集聚齊端午人氣

世界微資訊!蔚藍煙臺再啟航

云浮:“十四五”期末全市計劃新籌建保租房不少于1000套_世界訊息

今日關注:黃仁勛稱英偉達“極有可能”在歐洲投資

或2023年底亮相 奧迪Q6 e-tron諜照曝光

盧卡申科與普里戈任有約20年交情 基本情況講解

我省法檢攜手共促行政爭議實質性化解

端午“買買買”!金價走低 黃金飾品消費熱度高

環球快播:女孩充電被電擊內臟受損面臨截肢 蘋果官方:適配器非原裝,如果是第三方問題,不會賠償

揚州考試錄用公務員工作 新錄用公務員645名 全球快播

瓦格納人員撤離俄南部軍區總部所在區域 環球觀點

北京詳解高溫津貼如何發放-世界最資訊

打印紙產業深度調研報告 打印紙行業的前景與未來趨勢分析2023-環球即時看

全球微頭條丨端午假期民航鐵路出行均超2019年水平 拼假出行受歡迎

今熱點:【農牧飼漁】6月USDA跟蹤月報:6月USDA上調三大作物產量,持續關注厄爾尼諾

【天天播資訊】AMD RX 7800 XT顯卡新爆料,將采用新GPU

銀川燒烤店燃氣爆炸事故原因公布-焦點快報

跨越2100公里,每年最多向浙江輸送300億千瓦時的四川水電 一條銀線 千里“閃送”

世界焦點!“家校坊”凝聚起鄉村家校合力

在北京,高中讀韓國課程國際學校怎么樣?

漲不動的「房補區」,悄悄離開的互聯網大廠人_快資訊

芹菜炒香干是怎么做的?

吃蔬菜排毒是什么原理?-每日焦點

經常吃哪些水果蔬菜可以養顏美容? 速讀

1歲寶寶玩水果切玩具好嘛? 每日速遞

世界觀焦點:贛州白癜風醫院怎么找-患者如何治療自己的白斑才能盡快好轉呢?

當前信息:現在小麥什么價(小麥價格最新行情2023)

螃蟹粽、印花蛋、艾草涼粉……你知道端午有哪些創意美食嗎?


久久久精品2019中文字幕神马_欧美亚洲一区三区_欧美大人香蕉在线_精品88久久久久88久久久_中文字幕一区二区三区在线播放 _精品国产一区二区三区久久影院_欧洲av在线精品_粉嫩av一区二区三区_亚洲欧美一区二区三区极速播放_国产亚洲精品久久
26uuu久久综合| www激情久久| 日韩一区二区免费在线电影| 日韩欧美高清在线| 国产在线播放一区三区四| 一区二区三国产精华液| 天堂资源在线中文精品| 日韩女优视频免费观看| 一片黄亚洲嫩模| 色诱视频网站一区| 国产中文一区二区三区| 亚洲一区二区三区在线看| 久久久久久久av麻豆果冻| 蜜桃久久久久久久| 亚洲综合成人在线视频| 中文字幕欧美日韩一区| 欧美色大人视频| 国产日韩欧美制服另类| 色哟哟一区二区在线观看| 国产乱子伦一区二区三区国色天香| 性做久久久久久免费观看 | 天堂va蜜桃一区二区三区| 激情综合网激情| 久久99精品国产.久久久久久| 综合电影一区二区三区| 国产一区二区三区国产| 日本欧美肥老太交大片| 激情国产一区二区| 成人av片在线观看| 91国产福利在线| 91精品一区二区三区在线观看| 成人三级伦理片| 日韩欧美一级片| 亚洲欧洲综合另类在线 | 亚洲女同一区二区| 亚洲午夜在线观看视频在线| 日本不卡中文字幕| 日本精品免费观看高清观看| 国产精品夜夜嗨| 99久久99久久久精品齐齐| 在线亚洲精品福利网址导航| 日韩欧美国产1| 99精品1区2区| 91久久精品一区二区三| 欧美伦理电影网| 欧美日韩夫妻久久| 9191久久久久久久久久久| 成人性生交大片免费看在线播放 | 91精品国产综合久久精品性色 | 韩国理伦片一区二区三区在线播放| 青青草精品视频| 国产一区激情在线| av在线播放不卡| 26uuu精品一区二区在线观看| 国产精品久久网站| 亚洲激情自拍视频| 国产91露脸合集magnet| 日本精品免费观看高清观看| 色狠狠桃花综合| 久久午夜免费电影| 亚洲精品中文字幕在线观看| 最新久久zyz资源站| 美脚の诱脚舐め脚责91| 91九色最新地址| 亚洲男同性视频| 日本午夜一本久久久综合| 在线观看日韩电影| 91精品欧美综合在线观看最新 | 日韩欧美在线观看一区二区三区| 久久久五月婷婷| 韩国在线一区二区| 日韩视频国产视频| 国产精品毛片大码女人| 精品在线观看视频| 久久久蜜桃精品| 成人午夜精品在线| 国产亚洲短视频| 成人激情动漫在线观看| 日本午夜一区二区| 欧美网站一区二区| 精品亚洲成a人| 欧美日本在线观看| 日韩精品三区四区| 欧美日韩1234| 紧缚奴在线一区二区三区| 日韩午夜在线观看视频| 国产精品正在播放| 亚洲精品免费在线播放| 91麻豆精品国产91久久久久| 亚洲一区二区三区爽爽爽爽爽| 欧美午夜精品免费| 亚洲444eee在线观看| 日韩美女视频一区二区在线观看| 国产在线不卡一区| 亚洲精品乱码久久久久| 日韩欧美在线1卡| 亚洲人亚洲人成电影网站色| 久久er精品视频| 国产精品天美传媒| 欧美图片一区二区三区| 亚洲成人午夜电影| 欧美亚洲国产一区二区三区va| 日韩欧美国产电影| 91麻豆精品国产91| 亚洲精品日日夜夜| 久久久久久夜精品精品免费| 在线一区二区三区做爰视频网站| 久久精品国产**网站演员| 国产精品沙发午睡系列990531| 欧美午夜电影在线播放| 国产精品66部| 看电影不卡的网站| 亚洲一区在线观看免费观看电影高清| 日韩三级视频在线观看| 99精品欧美一区| 国产黄色精品网站| 免费人成精品欧美精品| 日本中文字幕一区二区有限公司| 国产精品色哟哟网站| 日韩精品一区二区三区四区| 91精品国产综合久久久久久 | 亚洲欧美激情小说另类| 久久精品视频免费| 91精品国产色综合久久不卡电影| 99re视频精品| 在线一区二区三区四区| 欧美伊人精品成人久久综合97| 在线看日韩精品电影| 欧美亚一区二区| 欧美做爰猛烈大尺度电影无法无天| 在线免费亚洲电影| 一本久久综合亚洲鲁鲁五月天| 在线看国产一区二区| 在线一区二区观看| 51久久夜色精品国产麻豆| 日韩一区二区三区三四区视频在线观看| 国产精品一区二区免费不卡| 日韩精品亚洲专区| 精品一区二区三区在线播放 | www.av精品| 欧美日韩免费一区二区三区视频| 91麻豆精品国产91久久久使用方法| 91精品国产欧美一区二区| 久久久天堂av| 五月婷婷综合激情| 九九九精品视频| 成人美女视频在线看| 欧美精品日韩一区| 亚洲欧美综合网| 97精品久久久久中文字幕| 国产精品久久久久桃色tv| 国产精品成人免费在线| 欧美成人一级视频| 91精品综合久久久久久| 成人一区在线看| 国产成人精品网址| 日本欧美大码aⅴ在线播放| 亚洲与欧洲av电影| 午夜精品免费在线观看| 婷婷亚洲久悠悠色悠在线播放| 一区二区三区在线视频免费观看| 欧美成人a∨高清免费观看| 日本精品一级二级| 色噜噜狠狠色综合欧洲selulu| 亚洲妇熟xx妇色黄| 亚洲精品福利视频网站| 中文字幕欧美区| 国产精品的网站| 亚洲一区二区三区在线播放| 亚洲男同性恋视频| 日本成人中文字幕在线视频| 亚洲欧美aⅴ...| 亚洲一区二区三区在线播放| 国产精品一卡二卡在线观看| 另类成人小视频在线| 亚洲欧洲成人精品av97| 日韩美女在线视频| 国产欧美一区二区三区在线老狼| 亚洲日本乱码在线观看| 免费在线观看不卡| 亚洲一区国产视频| 日韩欧美成人一区| 亚洲黄色免费电影| 经典一区二区三区| 欧美在线视频不卡| 日本一区二区三区在线观看| 亚洲精品成人少妇| 日韩av一区二区三区| 不卡的av网站| 久久久久亚洲蜜桃| 亚洲色图在线播放| 国产高清精品久久久久| 3751色影院一区二区三区| 久久久久国产一区二区三区四区| 亚洲精品中文字幕在线观看| 麻豆精品蜜桃视频网站| 欧美日韩中文字幕精品| 中文一区二区在线观看| 麻豆成人久久精品二区三区红| 91麻豆高清视频|