国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動態(tài)規(guī)劃算法 - LC354. 俄羅斯套娃信封問題

這篇具有很好參考價值的文章主要介紹了動態(tài)規(guī)劃算法 - LC354. 俄羅斯套娃信封問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

354. 俄羅斯套娃信封問題

困難

給你一個二維整數(shù)數(shù)組?envelopes?,其中?envelopes[i] = [wi, hi]?,表示第?i?個信封的寬度和高度。

當(dāng)另一個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進(jìn)另一個信封里,如同俄羅斯套娃一樣。

請計算?最多能有多少個?信封能組成一組“俄羅斯套娃”信封(即可以把一個信封放到另一個信封里面)。

注意:不允許旋轉(zhuǎn)信封。

前言

這道題是最長上升子序列的變種題,難點(diǎn)在于:首先需要先對給定的二維數(shù)組進(jìn)行排序后,再求上升子序列。

題解

首先貼出經(jīng)典的解法,動態(tài)規(guī)劃求上升子序列。

func maxEnvelopes(envelopes [][]int) int {
	n := len(envelopes)
	// w升序,h降序
	sort.Slice(envelopes, func(i, j int) bool {
		ei, ej := envelopes[i], envelopes[j]
		return ei[0] < ej[0] || (ei[0] == ej[0] && ei[1] > ej[1])
	})

	var dp = make([]int, n)
	for i := 0; i < n; i++ {
		dp[i] = 1
	}
	// var res int
	for i := 1; i < n; i++ {
		for j := 0; j < i; j++ {
			if envelopes[i][1] > envelopes[j][1] {
				dp[i] = max(dp[i], dp[j]+1)
			}
		}
		// res = max(res, dp[i])
	}
	return max(dp...)
}

func max(a ...int) int {
	res := a[0]
	for _, v := range a[1:] {
		if v > res {
			res = v
		}
	}
	return res
}

但是很遺憾,昨天發(fā)現(xiàn)這個解法已經(jīng)無法通過leetcode的所有測試用例了(之前是可以的),看了下官方的題解,原來是出了新的方法求上升子序列,通過二分查找的方式,時間復(fù)雜度更低。

func maxEnvelopes(envelopes [][]int) int {
	//n := len(envelopes)
	// w升序,h降序
	sort.Slice(envelopes, func(i, j int) bool {
		ei, ej := envelopes[i], envelopes[j]
		return ei[0] < ej[0] || (ei[0] == ej[0] && ei[1] > ej[1])
	})

	var dp = make([]int, 0)
	for i := range envelopes {
		h := envelopes[i][1]
		idx := sort.SearchInts(dp, h)
		if idx < len(dp) {
			dp[idx] = h
		} else {
			dp = append(dp, h)
		}
	}

	return len(dp)
}

題解雖然看起來更簡單,其實(shí)是因?yàn)間olang已經(jīng)內(nèi)置實(shí)現(xiàn)sort.SearchInts函數(shù),通過這個函數(shù)可以找到h在上升數(shù)組dp中的index下標(biāo):

(1)如果h在dp中存在,則返回h對應(yīng)的下標(biāo)。

(2)如果h大于dp中最大元素,則返回下標(biāo)=len(dp) (注意??這個下標(biāo)直接索引會越界),否則返回最小的嚴(yán)格大于h的元素的下標(biāo)文章來源地址http://www.zghlxwxcb.cn/news/detail-849076.html

到了這里,關(guān)于動態(tài)規(guī)劃算法 - LC354. 俄羅斯套娃信封問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • pygame俄羅斯方塊游戲

    pygame俄羅斯方塊游戲

    1.安裝python 2.引入游戲庫pygame 3.引入隨機(jī)數(shù) 俄羅斯方塊初始形狀 這里使用一個二維數(shù)組 用來標(biāo)記俄羅斯相對應(yīng)的方塊形狀 代碼如下: 游戲移動方向是否可能判斷 這里為了不讓他出現(xiàn)穿墻,跨過方塊下落 都做對應(yīng)的碰撞判斷 具體代碼如下: 俄羅斯方塊旋轉(zhuǎn)變形代碼實(shí)現(xiàn) 俄

    2024年02月08日
    瀏覽(27)
  • python制作俄羅斯方塊

    python制作俄羅斯方塊

    作者簡介 :一名后端開發(fā)人員,每天分享后端開發(fā)以及人工智能相關(guān)技術(shù),行業(yè)前沿信息,面試寶典。 座右銘 :未來是不可確定的,慢慢來是最快的。 個人主頁 :極客李華-CSDN博客 合作方式 :私聊+ 這個專欄內(nèi)容 :BAT等大廠常見后端java開發(fā)面試題詳細(xì)講解,更新數(shù)目10

    2024年02月12日
    瀏覽(24)
  • c語言——俄羅斯方塊

    c語言——俄羅斯方塊

    俄羅斯方塊是久負(fù)盛名的游戲,它也和貪吃蛇,掃雷等游戲位列經(jīng)典游戲的?列。 《俄羅斯方塊》(Tetris,俄文:Тетрис)是一款由俄羅斯人阿列克謝·帕基特諾夫于1984年6月發(fā)明的休閑游戲。 該游戲曾經(jīng)被多家公司代理過。經(jīng)過多輪訴訟后,該游戲的代理權(quán)最終被任天堂

    2024年02月05日
    瀏覽(24)
  • 俄羅斯方塊游戲(C語言)

    簡介:俄羅斯方塊(Tetris)是一款經(jīng)典的游戲,下面是用C語言實(shí)現(xiàn)俄羅斯方塊的示例代碼: code 這是一個非常簡單的俄羅斯方塊游戲,只有基本的方塊形狀和控制操作。如果想要更加完整的游戲體驗(yàn),可以添加更多的方塊形狀、音效、背景音樂、計分系統(tǒng)等等。 分析 這份代

    2024年02月07日
    瀏覽(29)
  • 俄羅斯方塊小游戲開發(fā)

    俄羅斯方塊小游戲開發(fā)

    代碼圖: 結(jié)果圖:

    2024年02月04日
    瀏覽(23)
  • 用python制作俄羅斯方塊

    代碼如下,可以直接運(yùn)行:

    2024年02月11日
    瀏覽(26)
  • Javascript 俄羅斯方塊 游戲代碼

    Javascript 俄羅斯方塊 游戲代碼

    本俄羅斯方塊代碼采用 JavaScript 腳本代碼寫成,簡單易懂; 全代碼采用靜態(tài)類及靜態(tài)變量成員組成; 全腳本通過實(shí)現(xiàn)代碼全局配置 OLSFK.Options = {...} 定義方塊起始坐標(biāo)及定義各自的旋轉(zhuǎn)點(diǎn); 從初始化俄羅斯方塊界面開始,再監(jiān)聽鍵盤事件;以及左右,向下及旋轉(zhuǎn)動作判斷,

    2024年02月07日
    瀏覽(33)
  • 用Pygame寫俄羅斯方塊

    此文章參考的是吃飯超人的文章 首先我們先打開cmd輸入如下令命 然后打開python或者pycharm 輸入如下代碼

    2024年02月12日
    瀏覽(26)
  • Python課程設(shè)計之俄羅斯方塊

    Python課程設(shè)計之俄羅斯方塊

    點(diǎn)擊查看 點(diǎn)擊下載 Python課程設(shè)計之俄羅斯方塊 軟件需求 :Python環(huán)境 壓縮包內(nèi)含 :源代碼、打包好的可執(zhí)行文件、文檔報告 (1)、搭建基礎(chǔ)窗體 使用tkinter實(shí)現(xiàn)基礎(chǔ)窗體。 運(yùn)行代碼生成窗口如下 接下來需要在窗體里面,添加一個畫布容器用來“裝”俄羅斯方塊,就是讓這

    2024年02月09日
    瀏覽(26)
  • 前端實(shí)現(xiàn)俄羅斯方塊游戲(內(nèi)含源碼)

    前端實(shí)現(xiàn)俄羅斯方塊游戲(內(nèi)含源碼)

    目錄 一、前言 二、功能介紹 三、頁面搭建 四、樣式設(shè)置 五、邏輯部分 ????????今天帶領(lǐng)大家完成俄羅斯方塊游戲,功能也比較簡單,也是想借助這樣一個簡單的功能,然后來幫助大家了解我們JavaScript在前端中的作用, 后續(xù)也會帶領(lǐng)大家用前端一些有趣的小游戲,純前

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包