久久久精品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一区二区三区_亚洲欧美一区二区三区极速播放_国产亚洲精品久久
一区二区在线观看不卡| 91精品啪在线观看国产60岁| 麻豆一区二区三区| 91麻豆精品国产自产在线观看一区| 日韩一区有码在线| 精品视频一区二区三区免费| 男男gaygay亚洲| 国产亚洲综合性久久久影院| 99久久亚洲一区二区三区青草| 日韩 欧美一区二区三区| 亚洲欧美另类在线| 日韩欧美电影在线| 欧美区一区二区三区| 成人污视频在线观看| 免费成人在线网站| 国产拍揄自揄精品视频麻豆| 欧美影视一区二区三区| 91丨九色丨蝌蚪富婆spa| 国产精品自拍三区| 亚洲欧美成人一区二区三区| 欧美成人激情免费网| 精品免费一区二区三区| 91超碰这里只有精品国产| 色噜噜狠狠一区二区三区果冻| 99久久精品免费看国产| 91网址在线看| 欧美无乱码久久久免费午夜一区| 欧美三区免费完整视频在线观看| 欧美高清hd18日本| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 一区二区三区美女视频| 欧美精品1区2区| 久久久精品日韩欧美| 91黄视频在线| 国产精品久久久久久久久搜平片| 国产精品每日更新在线播放网址| 亚洲图片欧美激情| 亚洲精品免费播放| 久久99国产精品尤物| 色94色欧美sute亚洲线路一ni| 欧美日韩一级大片网址| 中文字幕制服丝袜成人av| 日本美女一区二区三区| 欧美精品自拍偷拍动漫精品| 国产精品传媒入口麻豆| 成人免费视频视频在线观看免费 | 亚洲一区自拍偷拍| 91美女在线视频| 亚洲私人影院在线观看| 成人一区二区三区| 国产精品欧美久久久久无广告| 狠狠色丁香婷综合久久| 久久久不卡影院| 国产激情一区二区三区| 色菇凉天天综合网| 中文字幕亚洲一区二区av在线| 日本网站在线观看一区二区三区 | 亚洲一区二区三区四区在线免费观看 | 美女视频黄 久久| 亚洲少妇中出一区| 制服丝袜日韩国产| 国产一区 二区| 亚洲成av人片一区二区梦乃| 欧美一区二区三区免费视频| 亚洲综合激情另类小说区| 91麻豆精品国产91久久久 | 久久午夜电影网| 99久久综合色| 国产福利91精品一区二区三区| 国产精品久久久久久久久搜平片| 欧美日韩中文一区| 成人三级伦理片| 麻豆精品视频在线观看视频| 亚洲女女做受ⅹxx高潮| 国产调教视频一区| 日韩欧美www| 久久综合色8888| 日韩一区二区电影网| 欧美电影在哪看比较好| 欧美亚洲综合色| 国产成人综合在线播放| 一区二区三区欧美亚洲| 精品国产一区二区亚洲人成毛片 | 久久精品国产秦先生| 国产成人亚洲综合a∨猫咪| 免费看日韩精品| 国产激情精品久久久第一区二区| 国产在线日韩欧美| 亚洲综合无码一区二区| 国产老妇另类xxxxx| 丰满少妇在线播放bd日韩电影| 97se亚洲国产综合在线| 欧美系列亚洲系列| 精品国产乱码久久久久久老虎| 日本道精品一区二区三区| 久久久国际精品| 午夜精品一区二区三区电影天堂 | 91精彩视频在线| 国产日韩欧美亚洲| 国产精品护士白丝一区av| 麻豆成人久久精品二区三区红| 国产一区二区不卡| 欧美福利视频导航| 亚洲另类在线视频| 欧美自拍丝袜亚洲| 亚洲一区二区三区四区五区黄| 国产成人鲁色资源国产91色综| 日韩精品资源二区在线| 喷水一区二区三区| 日本久久一区二区| 亚洲女人****多毛耸耸8| 亚洲小说欧美激情另类| 国产成人一区在线| 自拍偷拍国产精品| 欧美日韩精品福利| 亚洲一区二区三区四区的| 日韩一级片在线观看| 久久99国产精品免费| 久久亚洲精华国产精华液| 成人av集中营| 婷婷中文字幕综合| www久久精品| 欧美少妇xxx| 天天操天天综合网| 中文字幕第一区二区| 91麻豆精品国产无毒不卡在线观看| 裸体一区二区三区| 一区二区三区四区精品在线视频| 久久无码av三级| 欧美一卡二卡三卡四卡| 日韩国产欧美一区二区三区| 国产精品色一区二区三区| 日韩女优av电影在线观看| 91黄色免费版| 欧美日韩情趣电影| 欧美午夜精品一区| 99久久99久久精品免费看蜜桃| 免费观看在线综合色| 亚洲成人先锋电影| 一区二区三区资源| 日韩经典一区二区| 日韩在线一区二区三区| 亚洲自拍都市欧美小说| 亚洲女人小视频在线观看| 国产精品久久久久桃色tv| 国产色产综合色产在线视频| 日韩美一区二区三区| 色狠狠色噜噜噜综合网| 欧美丝袜丝交足nylons图片| 欧美一区二区三区男人的天堂| 制服丝袜激情欧洲亚洲| 精品久久国产字幕高潮| 日韩伦理av电影| 老司机午夜精品| 99国产欧美另类久久久精品 | **欧美大码日韩| 天堂蜜桃91精品| 奇米精品一区二区三区四区| www.av亚洲| 欧美性色欧美a在线播放| 欧美极品xxx| 中文字幕一区二区三区在线不卡| 亚洲国产精品成人综合色在线婷婷| 午夜欧美电影在线观看| 亚洲成人资源在线| 国产美女视频91| 日韩欧美高清一区| 日韩**一区毛片| 欧美久久高跟鞋激| 亚洲一区在线视频观看| 色综合久久久久| 亚洲精品视频一区| 一本大道久久a久久综合婷婷 | 国产精品美女久久久久aⅴ国产馆| 国产乱子轮精品视频| 欧美成人一区二区三区片免费 | 韩国午夜理伦三级不卡影院| 国产精品香蕉一区二区三区| 99国产精品国产精品久久| 日韩小视频在线观看专区| 亚洲天堂av老司机| 精品一二线国产| 日韩高清一区二区| 久久毛片高清国产| 成人精品鲁一区一区二区| 2022国产精品视频| 99久久精品免费看国产| 青青草精品视频| 亚洲欧洲日韩综合一区二区| 色婷婷久久久综合中文字幕| 国产资源精品在线观看| 亚洲线精品一区二区三区八戒| 国产偷国产偷精品高清尤物| 91福利资源站| 激情五月婷婷综合| 婷婷夜色潮精品综合在线| 国产精品私人影院| 国产三级精品三级| 欧美自拍偷拍一区| 777久久久精品|