日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Trilogy公司的笔试题:根据指定规则用最少的步骤将数转为1

發布時間:2025/3/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Trilogy公司的笔试题:根据指定规则用最少的步骤将数转为1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?? Trilogy公司的筆試題:

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對于一個給定的n,怎樣才能用最少的步驟將它變到1。
??? 例如:n=11: ① ++n -> 12 ② n/2 -> 6 ③ n/2 -> 3?? ④ --n -> 2? ⑤ n/2 -> 1? 共需5步。

?
?

最簡單的方法就是用DP。設f(n)為所用的最少步驟。根據定義可得:

若n為偶數, f(n)=f(n/2) + 1;

若n為奇數, f(n)= min(f(n-1), f(n+1)) +1

???????????????? ??????= min(f((n-1)/2), f((n+1)/2)) +2

或者:

?f(2*k)=f(k)+1?

f(2*k+1)=min(f(k),f(k+1))+2

?

利用上述遞推公式,可以直接從數字1開始算到n,用一個數組保存前 n/2+1個數所用的最少步驟,但這時間和空間復雜度均為O(n),其實利用上面的遞推公式,可以實現時間復雜度為0(lg n)。觀察上面的遞推公式,可以發現,要計算n,只要計算n/2和n/2+1,如要計算59,只要計算:

59 -> 29,30 -> 14,15 -> 7,8 -> 3,4 -> 1,2。

?

代碼如下:

int?num2one_dp(unsigned?n)
{
??unsigned?tmp
=n,?flag=1,?ret=0,?next=1;
??
while?(tmp>>=1)?flag<<=1;
??
while?(flag>>=1)?{
????
if?(n?&?flag)?{
??????
if?(ret?>?next)?ret?=?next;
??????ret?
+=?2;
??????
++next;
????}
?else?{
??????
if?(next?>?ret)?next?=?ret;
??????next?
+=?2;
??????
++ret;
????}

??}

??
return?ret;
}


上面的O(lg n)解法,對n先處理高位的0和1,下面的O(lg n)解法則恰恰相反,先處理n的低位的0和1。

將n(n>1)轉為二進制數表示

(下面的“加1”、“減1”操作均特指對奇數采取的操作,操作次數包括對偶數的操作次數。)

⑴ 如果n僅由m個連續的1組成(即n=2^m-1, m>=2),

① “加1”操作:?需要 m+1 次操作

② “減1”操作:?需要 2*(m-1) 次操作

?????? 顯然,僅當m=2(即n=3)時,“減1”所用的操作次數才比“加1”少。

⑵ 如果n可以表示為:x10m1k (m>=1, k>=1)

(x可以為空串或任意01序列,0m表示連續m個0,1k表示連續k個1)

??① “加1”操作:?k+1 次操作后得到x10m-11如果,接著用“減1”操作(注意,這不這一定最優解法),總共k+3次操作可得x10m-1

??②“減1”操作:?2*k+1次操作后得到x10m-1

??顯然,僅當k=1時,“減1”所用的操作次數才可能比“加1”少。

?? 可以證明,對x10m1,“減1”所用的操作次數一定不會比“加1”的多。

?? (當k=1時,對x10m1,假設先進行一次“加1”操作最終所用的步驟數較少。“加1”操作后,在將x10m1轉為x11前,若用到“減1”操作,則可以直接對x10m1進行 “減1”操作,所有步驟更少,因而后面都是采用“加1”操作。

??? ?對x10m1(可表示為y01t0m1,y允許是空串),

 “加1”操作?? 2*m+t+2 次后得到 ?y1

“減1”操作??????m+2 次后得到?y01t

(再用“加1操作”,m+t+3后也可得到y1)

由于對m>=1,恒有m+t+3 <= 2*m+t+2,因而對x10m1

“減1”操作能保證得到最優解。)

⑶ 總之,僅當n=3或n二進制表示的最低2位是01時,才用“減1”操作


代碼:

int?num2one(unsigned?n)
{
??
if?(n==0)?return?-1;
??
int?count=0;
??
while?(1)?{
????
while?((n&1)==0)?{?n?>>=?1u;?++count;?}
????
if?(n<=3)?{
??????
//?n只能為1或3,n為3時,還要進行兩步操作
??????count?+=?n?-?1;
??????
break;
????}

????
if?((n&3)==1)??--n;
????
else?++n;
????
++count;
??}

??
return?count;
}


?

轉載于:https://www.cnblogs.com/flyinghearts/archive/2011/01/01/1923590.html

總結

以上是生活随笔為你收集整理的Trilogy公司的笔试题:根据指定规则用最少的步骤将数转为1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美伦理片 | 国产精品网页 | 欧美精品在欧美一区二区少妇 | 91丨国产丨白丝 | 成人毛片视频网站 | 99爱国产 | 欧美一级淫片免费 | 91淫黄大片 | 中文字幕一区二区三区不卡 | avtt在线 | 久久av资源网 | 国产天堂精品 | 亚洲精品一区在线 | 美色视频 | 在线观看福利片 | 亚洲国产成人在线观看 | 国产xxx在线观看 | 天天摸天天干天天操 | 在线观看av的网址 | 深夜激情视频 | 五月婷婷综 | 日本午夜网| 亚洲制服一区 | 国产精品国产一区二区 | 在线播放你懂的 | 中文字字幕在线观看 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 国产精品一区一区三区 | 三级欧美视频 | 中文幕无线码中文字夫妻 | 婷婷久久精品 | 午夜在线观看免费视频 | 岛国大片在线观看 | 怡春院国产 | 66精品 | 国产一级全黄 | 久热免费| 美女被啪羞羞粉色视频 | 91操操操 | h片免费网站 | 黄色永久免费网站 | 黑人av | 久久久精品人妻一区二区三区四 | 中文字幕有码在线播放 | 欧美成人69| 先锋影音中文字幕 | 看黄网站在线观看 | 国产精品腿扒开做爽爽爽挤奶网站 | 四虎一区二区三区 | 被黑人各种姿势猛c哭h文1 | 美女张开腿让男人桶爽 | 久久精品视频播放 | 欧美中文 | 久久久久久久久久成人 | 污网站免费在线观看 | 日韩字幕在线 | 亚洲另类春色 | 极品色av| 动漫精品一区一码二码三码四码 | 骚虎tv| 午夜视频www| 中文视频在线 | 中文字幕――色哟哟 | 韩国毛片一区二区 | 中文字幕av免费在线观看 | 国产女厕一区二区三区在线视 | 国产精品www在线观看 | 不卡视频在线播放 | 国产精品美女www爽爽爽 | 久久久久免费视频 | 亚洲综合精品视频 | 图片区亚洲色图 | 成人做爰100| 欧美日韩亚洲精品内裤 | 欧美黄色视屏 | 亚洲无套| 亚洲AV成人无码久久精品巨臀 | 91好色先生 | 国产女上位 | 九九综合视频 | 在线视频综合网 | 在线看成人av | www.日韩在线 | 欧美亚洲综合在线 | 亚洲色图国产精品 | 亚洲综合五月天 | 精品国产乱码久久久久久鸭王1 | 黑丝袜av| 国产又黄又粗 | 99热思思| 日本韩国三级 | 成人99| 秋霞一区 | 亚洲成人a v | av网址在线免费观看 | 超碰在线小说 | 无码人妻久久一区二区三区 | 一级片免费观看视频 | xxxx日本免费 |