精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

數(shù)據(jù)結(jié)構(gòu)與算法之單調(diào)遞增的數(shù)字

開(kāi)發(fā) 前端 算法
本題只要想清楚個(gè)例,例如98,一旦出現(xiàn)strNum[i - 1] > strNum[i]的情況(非單調(diào)遞增),首先想讓strNum[i - 1]減一,strNum[i]賦值9,這樣這個(gè)整數(shù)就是89。就可以很自然想到對(duì)應(yīng)的貪心解法了。

[[439817]]

單調(diào)遞增的數(shù)字

力扣題目鏈接:https://leetcode-cn.com/problems/monotone-increasing-digits

給定一個(gè)非負(fù)整數(shù) N,找出小于或等于 N 的最大的整數(shù),同時(shí)這個(gè)整數(shù)需要滿足其各個(gè)位數(shù)上的數(shù)字是單調(diào)遞增。

(當(dāng)且僅當(dāng)每個(gè)相鄰位數(shù)上的數(shù)字 x 和 y 滿足 x <= y 時(shí),我們稱這個(gè)整數(shù)是單調(diào)遞增的。)

示例 1:

  • 輸入: N = 10
  • 輸出: 9

示例 2:

  • 輸入: N = 1234
  • 輸出: 1234

示例 3:

  • 輸入: N = 332
  • 輸出: 299

說(shuō)明: N 是在 [0, 10^9] 范圍內(nèi)的一個(gè)整數(shù)。

暴力解法

題意很簡(jiǎn)單,那么首先想的就是暴力解法了,來(lái)我替大家暴力一波,結(jié)果自然是超時(shí)!

代碼如下:

  1. class Solution { 
  2. private: 
  3.     bool checkNum(int num) { 
  4.         int max = 10; 
  5.         while (num) { 
  6.             int t = num % 10; 
  7.             if (max >= t) max = t; 
  8.             else return false
  9.             num = num / 10; 
  10.         } 
  11.         return true
  12.     } 
  13. public
  14.     int monotoneIncreasingDigits(int N) { 
  15.         for (int i = N; i > 0; i--) { 
  16.             if (checkNum(i)) return i; 
  17.         } 
  18.         return 0; 
  19.     } 
  20. }; 
  • 時(shí)間復(fù)雜度:O(n * m) m為n的數(shù)字長(zhǎng)度
  • 空間復(fù)雜度:O(1)

貪心算法

題目要求小于等于N的最大單調(diào)遞增的整數(shù),那么拿一個(gè)兩位的數(shù)字來(lái)舉例。

例如:98,一旦出現(xiàn)strNum[i - 1] > strNum[i]的情況(非單調(diào)遞增),首先想讓strNum[i - 1]--,然后strNum[i]給為9,這樣這個(gè)整數(shù)就是89,即小于98的最大的單調(diào)遞增整數(shù)。

這一點(diǎn)如果想清楚了,這道題就好辦了。

局部最優(yōu):遇到strNum[i - 1] > strNum[i]的情況,讓strNum[i - 1]--,然后strNum[i]給為9,可以保證這兩位變成最大單調(diào)遞增整數(shù)。

全局最優(yōu):得到小于等于N的最大單調(diào)遞增的整數(shù)。

但這里局部最優(yōu)推出全局最優(yōu),還需要其他條件,即遍歷順序,和標(biāo)記從哪一位開(kāi)始統(tǒng)一改成9。

此時(shí)是從前向后遍歷還是從后向前遍歷呢?

從前向后遍歷的話,遇到strNum[i - 1] > strNum[i]的情況,讓strNum[i - 1]減一,但此時(shí)如果strNum[i - 1]減一了,可能又小于strNum[i - 2]。

這么說(shuō)有點(diǎn)抽象,舉個(gè)例子,數(shù)字:332,從前向后遍歷的話,那么就把變成了329,此時(shí)2又小于了第一位的3了,真正的結(jié)果應(yīng)該是299。

所以從前后向遍歷會(huì)改變已經(jīng)遍歷過(guò)的結(jié)果!

那么從后向前遍歷,就可以重復(fù)利用上次比較得出的結(jié)果了,從后向前遍歷332的數(shù)值變化為:332 -> 329 -> 299

確定了遍歷順序之后,那么此時(shí)局部最優(yōu)就可以推出全局,找不出反例,試試貪心。

C++代碼如下:

  1. class Solution { 
  2. public
  3.     int monotoneIncreasingDigits(int N) { 
  4.         string strNum = to_string(N); 
  5.         // flag用來(lái)標(biāo)記賦值9從哪里開(kāi)始 
  6.         // 設(shè)置為這個(gè)默認(rèn)值,為了防止第二個(gè)for循環(huán)在flag沒(méi)有被賦值的情況下執(zhí)行 
  7.         int flag = strNum.size(); 
  8.         for (int i = strNum.size() - 1; i > 0; i--) { 
  9.             if (strNum[i - 1] > strNum[i] ) { 
  10.                 flag = i; 
  11.                 strNum[i - 1]--; 
  12.             } 
  13.         } 
  14.         for (int i = flag; i < strNum.size(); i++) { 
  15.             strNum[i] = '9'
  16.         } 
  17.         return stoi(strNum); 
  18.     } 
  19. }; 
  • 時(shí)間復(fù)雜度:O(n) n 為數(shù)字長(zhǎng)度
  • 空間復(fù)雜度:O(n) 需要一個(gè)字符串,轉(zhuǎn)化為字符串操作更方便

總結(jié)

本題只要想清楚個(gè)例,例如98,一旦出現(xiàn)strNum[i - 1] > strNum[i]的情況(非單調(diào)遞增),首先想讓strNum[i - 1]減一,strNum[i]賦值9,這樣這個(gè)整數(shù)就是89。就可以很自然想到對(duì)應(yīng)的貪心解法了。

想到了貪心,還要考慮遍歷順序,只有從后向前遍歷才能重復(fù)利用上次比較的結(jié)果。

最后代碼實(shí)現(xiàn)的時(shí)候,也需要一些技巧,例如用一個(gè)flag來(lái)標(biāo)記從哪里開(kāi)始賦值9。

其他語(yǔ)言版本

Java:

  1. 版本1 
  2. class Solution { 
  3.     public int monotoneIncreasingDigits(int N) { 
  4.         String[] strings = (N + "").split(""); 
  5.         int start = strings.length; 
  6.         for (int i = strings.length - 1; i > 0; i--) { 
  7.             if (Integer.parseInt(strings[i]) < Integer.parseInt(strings[i - 1])) { 
  8.                 strings[i - 1] = (Integer.parseInt(strings[i - 1]) - 1) + ""
  9.                 start = i; 
  10.             } 
  11.         } 
  12.         for (int i = start; i < strings.length; i++) { 
  13.             strings[i] = "9"
  14.         } 
  15.         return Integer.parseInt(String.join("",strings)); 
  16.     } 

java版本1中創(chuàng)建了String數(shù)組,多次使用Integer.parseInt了方法,這導(dǎo)致不管是耗時(shí)還是空間占用都非常高,用時(shí)12ms,下面提供一個(gè)版本在char數(shù)組上原地修改,用時(shí)1ms的版本

  1. 版本2 
  2. class Solution { 
  3.     public int monotoneIncreasingDigits(int n) { 
  4.         if (n==0)return 0; 
  5.         char[] chars= Integer.toString(n).toCharArray(); 
  6.         int start=Integer.MAX_VALUE;//start初始值設(shè)為最大值,這是為了防止當(dāng)數(shù)字本身是單調(diào)遞增時(shí),沒(méi)有一位數(shù)字需要改成9的情況 
  7.         for (int i=chars.length-1;i>0;i--){ 
  8.             if (chars[i]<chars[i-1]){ 
  9.                 chars[i-1]--; 
  10.                 start=i; 
  11.             } 
  12.         } 
  13.         StringBuilder res=new StringBuilder(); 
  14.         for (int i=0;i<chars.length;i++){ 
  15.             if (chars[i]=='0'&&i==0)continue;//防止出現(xiàn)09這樣的情況 
  16.             if (i>=start){ 
  17.                 res.append('9'); 
  18.             }else res.append(chars[i]); 
  19.         } 
  20.         return Integer.parseInt(res.toString()); 
  21.     } 

Python:

  1. class Solution: 
  2.     def monotoneIncreasingDigits(self, n: int) -> int
  3.         a = list(str(n)) 
  4.         for i in range(len(a)-1,0,-1): 
  5.             if int(a[i]) < int(a[i-1]): 
  6.                 a[i-1] = str(int(a[i-1]) - 1) 
  7.                 a[i:] = '9' * (len(a) - i)  #python不需要設(shè)置flag值,直接按長(zhǎng)度給9就好了 
  8.         return int("".join(a)) 

Go

  1. func monotoneIncreasingDigits(N intint { 
  2.     s := strconv.Itoa(N)//將數(shù)字轉(zhuǎn)為字符串,方便使用下標(biāo) 
  3.     ss := []byte(s)//將字符串轉(zhuǎn)為byte數(shù)組,方便更改。 
  4.     n := len(ss) 
  5.     if n <= 1 { 
  6.         return N 
  7.     } 
  8.     for i:=n-1 ; i>0; i-- { 
  9.         if ss[i-1] > ss[i] {//前一個(gè)大于后一位,前一位減1,后面的全部置為9 
  10.             ss[i-1] -= 1 
  11.             for j := i ; j < n; j++ {//后面的全部置為9 
  12.                 ss[j] = '9' 
  13.             } 
  14.         } 
  15.     } 
  16.     res, _ := strconv.Atoi(string(ss)) 
  17.     return res 

Javascript

  1. var monotoneIncreasingDigits = function(n) { 
  2.     n = n.toString() 
  3.     n = n.split('').map(item => { 
  4.         return +item 
  5.     }) 
  6.     let flag = Infinity 
  7.     for(let i = n.length - 1; i > 0; i--) { 
  8.         if(n [i - 1] > n[i]) { 
  9.             flag = i 
  10.             n[i - 1] = n[i - 1] - 1 
  11.             n[i] = 9 
  12.         } 
  13.     } 
  14.  
  15.     for(let i = flag; i < n.length; i++) { 
  16.         n[i] = 9 
  17.     } 
  18.  
  19.     n = n.join(''
  20.     return +n 
  21. }; 

 

責(zé)任編輯:姜華 來(lái)源: 代碼隨想錄
相關(guān)推薦

2022-09-26 07:56:53

AVL算法二叉樹(shù)

2022-09-21 07:57:33

二叉搜索樹(shù)排序二叉樹(shù)

2020-10-30 09:56:59

Trie樹(shù)之美

2020-10-21 14:57:04

數(shù)據(jù)結(jié)構(gòu)算法圖形

2020-12-31 05:31:01

數(shù)據(jù)結(jié)構(gòu)算法

2023-03-08 08:03:09

數(shù)據(jù)結(jié)構(gòu)算法歸并排序

2020-10-20 08:14:08

算法與數(shù)據(jù)結(jié)構(gòu)

2020-10-12 11:48:31

算法與數(shù)據(jù)結(jié)構(gòu)

2022-01-18 19:13:52

背包問(wèn)題數(shù)據(jù)結(jié)構(gòu)算法

2023-10-27 07:04:20

2023-04-27 09:13:20

排序算法數(shù)據(jù)結(jié)構(gòu)

2021-12-21 11:39:01

數(shù)據(jù)結(jié)構(gòu)算法同構(gòu)字符串

2009-08-11 14:43:42

C#數(shù)據(jù)結(jié)構(gòu)與算法

2021-12-08 11:31:43

數(shù)據(jù)結(jié)構(gòu)算法合并區(qū)間

2021-07-16 04:57:45

Go算法結(jié)構(gòu)

2009-08-11 14:51:11

C#數(shù)據(jù)結(jié)構(gòu)與算法

2023-03-07 08:02:07

數(shù)據(jù)結(jié)構(gòu)算法數(shù)列

2023-03-02 08:15:13

2023-03-10 08:07:39

數(shù)據(jù)結(jié)構(gòu)算法計(jì)數(shù)排序

2009-08-11 14:30:32

C#數(shù)據(jù)結(jié)構(gòu)與算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

91在线你懂得| 国产一在线精品一区在线观看| 懂色av影视一区二区三区| 久久青青草综合| 亚洲无码久久久久久久| 欧美二区视频| 亚洲午夜精品久久久久久性色 | 激情高潮到大叫狂喷水| 日韩精品三级| 日本道精品一区二区三区| 亚洲一区精彩视频| 高潮毛片7777777毛片| 久久国产直播| 久久99国产精品久久久久久久久| 91av在线免费| 免费观看亚洲天堂| 91久久精品一区二区| 2021狠狠干| 九色网友自拍视频手机在线| 国产精选一区二区三区| 日本视频久久久| 国产精品成人免费观看| 精品国产一级毛片| 亚洲成人免费网站| 欧美成人乱码一二三四区免费| 操喷在线视频| 亚洲欧美另类综合偷拍| 日本在线成人一区二区| 人妻丰满熟妇av无码区hd| 毛片不卡一区二区| 2019av中文字幕| 国产亚洲精品久久久久久无几年桃| 精品一区亚洲| 亚洲精品狠狠操| 成人欧美精品一区二区| 亚洲午夜剧场| 欧美色网站导航| 欧美视频免费播放| 韩国成人免费视频| 亚洲精品精品亚洲| 自拍亚洲欧美老师丝袜| av中文字幕一区二区三区| 91丨九色porny丨蝌蚪| 99在线国产| 国产乱码精品一区二区三区精东| 日日夜夜免费精品视频| 国产69久久精品成人看| www.99re7.com| 伊人狠狠色j香婷婷综合| 九九热精品在线| 国产一区二区视频在线观看免费| 欧美综合一区| 一道本无吗dⅴd在线播放一区| av黄色在线免费观看| 精品精品精品| 日韩激情视频在线播放| 手机在线看片日韩| 久久porn| 亚洲精品在线看| 男生裸体视频网站| 久久av资源| 国产亚洲精品久久久久动| a级片在线观看| 北条麻妃国产九九九精品小说| 在线视频中文亚洲| 91香蕉视频污在线观看| 偷偷www综合久久久久久久| 综合激情国产一区| 一级黄色片日本| 中文字幕一区二区三区欧美日韩| 欧美乱大交xxxxx另类电影| 五月天丁香激情| 日韩视频一区二区三区在线播放免费观看| 欧美极品少妇xxxxⅹ裸体艺术| 精品无码人妻一区二区三| 99精品国产福利在线观看免费| 国产91精品黑色丝袜高跟鞋| 波多野结衣一区二区三区四区| 日本少妇一区二区| 成人午夜一级二级三级| 亚洲高清视频在线播放| 91在线高清观看| 亚洲免费不卡| 欧美24videosex性欧美| 亚洲成人第一页| 91av俱乐部| 成人影院网站ww555久久精品| 亚洲成人黄色网| 精品少妇人妻一区二区黑料社区| 青青草91久久久久久久久| 欧美成人性生活| 草久久免费视频| 蜜臀91精品一区二区三区| 97人人模人人爽人人喊38tv| 视频一区二区三区国产 | 欧美日韩中文国产| 免费黄视频在线观看| 美女久久99| 美女精品视频一区| 99精品在线播放| 国产一区二区三区在线观看免费| 久久99国产精品| 毛片av在线| 欧美性色xo影院| 亚洲妇熟xx妇色黄蜜桃| 精品少妇一区| 久久亚洲一区二区三区四区五区高| 久久久久99精品| 久久国产精品72免费观看| 好看的日韩精品| 秋霞午夜在线观看| 色综合天天视频在线观看| 亚洲丝袜在线观看| 国产成人高清| 久久免费视频网| 国产精品无码专区av免费播放| av一本久道久久综合久久鬼色| 一区二区高清视频| av日韩亚洲| 亚洲精品一区二区精华| 精品国产大片大片大片| 国产精品入口66mio| 亚洲综合中文字幕在线观看| 国产精品久久久久久久龚玥菲| 亚洲午夜在线电影| 国内国产精品天干天干| 欧美男男gaytwinkfreevideos| 欧美日韩不卡合集视频| 一二区在线观看| 国产偷国产偷亚洲高清人白洁| 精品久久久无码人妻字幂| 国产综合色激情| 亚洲欧洲日本专区| 亚洲 欧美 日韩 综合| 丰满放荡岳乱妇91ww| 中文字幕制服丝袜在线| av免费在线一区| 亚洲三级 欧美三级| 国产午夜福利片| 国产成+人+日韩+欧美+亚洲| 中国 免费 av| 四虎视频在线精品免费网址| 在线日韩日本国产亚洲| 国产第一页在线观看| 99精品欧美一区二区三区小说 | 奇米一区二区三区av| 欧美日产一区二区三区在线观看| 国模精品视频| 日韩成人在线播放| 97人人澡人人爽人人模亚洲| 成人亚洲一区二区一| 18禁裸男晨勃露j毛免费观看| 亚洲一区二区三区在线免费| 欧美激情视频一区| 男人天堂综合网| 午夜久久久久久电影| 韩国一区二区三区四区| 激情一区二区| 久久影院理伦片| 欧美性xxx| 中文字幕视频一区二区在线有码 | 精品国产一二三区| 日本在线视频免费| 久久亚洲精品小早川怜子| 国产第一页视频| 欧美亚洲国产一区| 成人性生交xxxxx网站| www久久日com| 精品国产99国产精品| 97免费在线观看视频| 久久久www成人免费无遮挡大片| 黄色一级一级片| 色偷偷综合网| 99久久精品免费看国产一区二区三区| 日本大胆在线观看| 日韩精品免费视频| 正在播放亚洲精品| 亚洲乱码精品一二三四区日韩在线| 少妇欧美激情一区二区三区| 韩日在线一区| 秋霞毛片久久久久久久久| 成人不卡视频| 美女av一区二区| 天堂在线视频网站| 欧美色国产精品| 久久久精品视频在线| 96av麻豆蜜桃一区二区| jizz欧美性11| 亚洲精品国产日韩| 亚洲免费在线精品一区| 成人台湾亚洲精品一区二区| 日韩美女免费观看| 搞黄网站在线观看| 亚洲国产小视频在线观看| 成人毛片一区二区三区| 一区二区在线免费观看| 国精产品一区一区三区免费视频 | 日韩一级不卡| 亚洲精品国产精品国自产| 一区二区免费| 国产精品一区二区三区久久久 | 日韩免费高清在线观看| 大片免费在线看视频| 日韩精品有码在线观看| 97超碰人人草| 欧美性xxxx极品hd满灌| 极品久久久久久| 国产夜色精品一区二区av| 亚洲精品一二三四| 日本大胆欧美人术艺术动态| 18禁裸男晨勃露j毛免费观看| 成人久久电影| 狼狼综合久久久久综合网| 高清一区二区中文字幕| 国产91露脸中文字幕在线| 欧美videosex性极品hd| 日韩在线视频导航| 欧美扣逼视频| 亚洲国产一区二区三区在线观看| 国产精品一级二级| 欧美丝袜丝交足nylons图片| 天堂网中文字幕| 亚洲成人在线免费| 亚洲av鲁丝一区二区三区| 中文子幕无线码一区tr| 91视频免费观看网站| 99视频精品全部免费在线| 精品国产午夜福利在线观看| 久久精品久久精品| 亚洲欧洲日本精品| 日韩综合一区二区| 欧美 日韩 激情| 亚洲精品色图| 国产婷婷一区二区三区| 中文字幕人成人乱码| 在线观看日韩片| 日本一本不卡| 神马影院一区二区三区| 欧美**字幕| 日韩视频专区| 日韩国产一区| 中文字幕成人一区| 91精品国产乱码久久久久久久| 日韩精品电影网站| 欧美一级精品片在线看| 午夜精品一区二区在线观看| 九热爱视频精品视频| 日韩电影免费观看高清完整| 久久爱www成人| 视频一区二区综合| 狠狠做六月爱婷婷综合aⅴ| 日本一区二区高清视频| 国产剧情一区| 亚州欧美一区三区三区在线| 成人在线免费观看网站| 亚洲欧洲日本国产| 999久久久91| xxxxxx在线观看| 国产一区日韩一区| 91九色在线观看视频| 免费国产自线拍一欧美视频| 欧美视频免费播放| 蜜桃久久久久久| 黑人性生活视频| 成人av资源网站| 亚洲激情视频小说| 国产精品欧美一级免费| 91 在线视频| 亚洲一区免费在线观看| 亚洲伊人成人网| 欧美麻豆精品久久久久久| 国产黄色一区二区| 日韩精品在线观看网站| av在线之家电影网站| 欧美成人午夜剧场免费观看| 麻豆免费在线| 国产精品一香蕉国产线看观看| 国产一区二区三区免费在线| 国产精品一级久久久| 国产一卡不卡| 成人在线免费观看网址| 亚洲日韩视频| 污污网站免费观看| 成人黄色a**站在线观看| 亚洲激情视频小说| 樱花草国产18久久久久| 天天干天天操天天操| 6080午夜不卡| 天堂网www中文在线| 日韩中文字幕精品| 高清视频在线观看三级| 国产欧美日韩中文字幕| 久久99国产精品久久99大师| 婷婷五月色综合| 亚洲激情网址| 日本在线播放一区二区| 91免费视频大全| 日韩欧美中文字幕视频| 色网站国产精品| 国产ts人妖调教重口男| 一区二区欧美亚洲| av第一福利在线导航| 国产欧美日韩精品丝袜高跟鞋| 久久97久久97精品免视看秋霞| 亚洲人成网站在线播放2019| 夜夜嗨av一区二区三区网站四季av| 亚洲这里只有精品| 久久久激情视频| 精品视频一区二区在线观看| 欧美高清一级片在线| 欧美69xxxxx| 久久久久久亚洲精品| 久久精品国产精品亚洲毛片| 久久综合久久综合这里只有精品| 欧美国产先锋| 91精品无人成人www| 久久中文娱乐网| 日韩精品一区三区| 91精品欧美综合在线观看最新| 国产精品视频一区二区久久| 911国产网站尤物在线观看| 美国十次综合久久| 正在播放亚洲| 日av在线不卡| 国产人妻一区二区| 偷窥少妇高潮呻吟av久久免费| 国产婷婷在线视频| 精品国内产的精品视频在线观看| 日韩免费va| 欧美精品一区二区三区四区五区| 欧美精品一级| 色欲无码人妻久久精品| 亚洲免费大片在线观看| 一起草av在线| 色偷偷av亚洲男人的天堂| 久久天堂av| 亚洲高清在线播放| 久久综合图片| www.av欧美| 色94色欧美sute亚洲线路一久| 四虎国产精品永远| 欧美一级bbbbb性bbbb喷潮片| 露出调教综合另类| 久久久亚洲精品无码| 成人白浆超碰人人人人| 国产午夜福利一区二区| 亚洲国产高潮在线观看| av中文字幕电影在线看| 国产麻豆日韩| 国产精品久久久久毛片大屁完整版| 欧美在线一级片| 欧美性xxxx极品hd满灌| 国内av一区二区三区| 国产精品久久久久久网站| 欧洲三级视频| 亚洲精品视频三区| 日韩美女精品在线| 午夜久久久久久久久久| 欧美精品久久久久a| 成人av综合网| 欧美牲交a欧美牲交aⅴ免费真| 久久这里只有精品视频网| 黄色污污网站在线观看| 色婷婷综合成人av| 国产va免费精品观看精品| 免费的一级黄色片| 99精品国产99久久久久久白柏| 最新中文字幕一区| 亚洲天堂网站在线观看视频| 亚洲国产综合在线观看| 成年在线观看视频| 99re亚洲国产精品| 国产精品尤物视频| 不卡av在线网站| 久久精品国产亚洲5555| 日本一极黄色片| 亚洲欧美偷拍卡通变态| 殴美一级特黄aaaaaa| 国产成人在线精品| 久久久久久久久久久妇女 | 99久久久久久久| 韩国日本不卡在线| 欧美精品一区二区久久| 美女被艹视频网站| 欧美性猛交丰臀xxxxx网站| 免费黄色网页在线观看| 国产美女99p| 久久精品久久精品| 欧美精品亚洲精品日韩精品| 深夜福利日韩在线看| 99国产精品久久一区二区三区| 日av中文字幕| 亚洲一区二区四区蜜桃| 国内av一区二区三区| 成人91免费视频| 免费观看日韩av| 亚洲 欧美 视频| 久久亚洲精品国产亚洲老地址| 欧美极品在线观看| 最新日本中文字幕|