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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

《编程之美——微软技术面试心得》一摞烙饼的排序初体验

發布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《编程之美——微软技术面试心得》一摞烙饼的排序初体验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《編程之美》讀書筆記:1.3?一摞烙餅的排序

問題:

????星期五的晚上,一幫同事在希格瑪大廈附近的“硬盤酒吧”多喝了幾杯。程序員多喝了幾杯之后談什么呢?自然是算法問題。有個同事說:“我以前在餐館打工,顧客經常點非常多的烙餅。店里的餅大小不一,我習慣在到達顧客飯桌前,把一摞餅按照大小次序擺好——小的在上面,大的在下面。由于我一只手托著盤子,只好用另一只手,一次抓住最上面的幾塊餅,把它們上下顛倒個個兒,反復幾次之后,這摞烙餅就排好序了。我后來想,這實際上是個有趣的排序問題:假設有n塊大小不一的烙餅,那最少要翻幾次,才能達到最后大小有序的結果呢?”

你能否寫出一個程序,對于n塊大小不一的烙餅,輸出最優化的翻餅過程呢?


初步分析:
1、使用動態規劃來解決,然而不能很快找出狀態轉移方程,暫時放棄 2、從上到下,從上往下確定當前序列的有序程度(升序、降序),當遇到違背有序的程度的元素的時候, 判斷該元素是否在這個有序序列區間范圍, 1)若在這個有序序列區間范圍,則將該違背有序元素和有序序列一起翻轉 2)若不在這個有序序列范圍,則將違背有序元素上面的有序序列進行翻轉 3)當該元素與序列邊界元素相同,則判斷該元素下一個元素以確定序列類型 舉例子: 輸入樣例: 5? 5 2 3 7 1 樣例分析: 從上往下分析5->2當前序列是降序的,邊界范圍是[5,2],當遇到3的時候,發現違背當前有序類型(降序),并且3在這個有序序列中,所以翻轉這個有序序列和這個元素,得出 3 2 5 7 1 從頭再次判斷該序列,評估該序列有序類型3->2(降序),邊界范圍是[3,2],當遇到5的時候,發現違背當前有序類型(降序),因為5不在這個有序序列,所以將違背有序元素上面的有序序列進行翻轉,得出 2 3 5 7 1 從頭再次判斷該序列,評估該序列有序類型3->7(升序),邊界范圍[3,7],當遇到1的時候,發現違背當前有序類型(降序)因為1不在這個有序序列,所以將違背有序元素上面的有序序列進行翻轉,得出 7 5 3 2 1 從頭再次判斷該序列,評估該序列有序類型7->1(降序),但是題目要求序列最終有序類型是升序,所以整個序列再次翻轉一次,得出 1 2 3 5 7 /* 把一摞餅按照大小次序擺好——從小到大,小在上,大在下 只能用一只手,一次抓住最上面的幾塊餅,把他們上下顛倒個個兒, 反復幾次之后,排好序 假設有n塊大小不一的烙餅,最少翻轉幾次,才能達到大小有序的結果? */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <algorithm> #include <vector> using namespace std; void printData(int val) {cout << val << " "; } void init_bin(vector<int> &v) {int n;//需要排序的餅的數目cin >> n;for (int i = 0; i < n; i++){int a;cin >> a;v.push_back(a);} }void sort_bin(vector<int> &v) {while (1){bool flag ;//排序標記int pStart = 1;//默認開始遍歷的下標為2if (v[1] == v[0]){while (v[pStart] == v[pStart - 1] && pStart < v.size())pStart++;//若元素相同,則判斷下一個}flag = v[pStart]>v[pStart - 1];//確定當前排序類型(升序、降序)bool next = flag;for (int i = pStart + 1; i < v.size(); i++){while (v[i] == v[i - 1] && i < v.size())i++;next = v[i]>v[i - 1];//確定當前元素與上一個比較后是升序還是降序if (next==flag)//與原本序列違背continue;auto _Start = &v[0];int *_End;//while (v[i] == v[0] && i < v.size())i++;if (flag ==v[i] > v[0]&& v[i] != v[0]){_End = &v[i];}else{_End = &v[i - 1];}reverse(_Start, _End+1);for_each(v.begin(), v.end(), printData); cout << endl;break;}//forif (next==flag&&flag)break;else if (next == flag&&flag == false){reverse(v.begin(), v.end());for_each(v.begin(), v.end(), printData); cout << endl;}}//while }int main(void) {vector<int> v;init_bin(v);sort_bin(v);cout << endl;system("pause");return 0; }
存在問題: 只分析上方有序程度,但是該序列其他部分有序程度并沒有分析 比如 10 3 2 1 6 5 4 9 8 7 0 這個樣例就存在著部分區域有序的現象,[3,1] [6,4] [9,7][0],而這種情況的話,上述程序在6的時候已經分析錯誤了,要修改,請大神指教。

總結

以上是生活随笔為你收集整理的《编程之美——微软技术面试心得》一摞烙饼的排序初体验的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 乱中年女人伦 | 日韩免 | 日本特级黄色大片 | 亚洲男人天堂网站 | 免费成人美女在线观看 | 91网站在线免费看 | 欧美色xxxx | 成人性生交免费看 | 国产高清视频在线播放 | 天天看天天色 | 2021毛片 | 亚洲国产成人精品一区二区三区 | 污污的视频在线免费观看 | 亚洲香蕉在线观看 | 123超碰 | 天天看片天天射 | 国产少女免费观看高清 | 99综合视频| 在线视频欧美日韩 | 夜色资源网 | 九一网站在线观看 | 特大黑人巨交吊性xxxxhd | 国产免费一区二区三区最新不卡 | 91精品推荐 | 女人扒开屁股让男人捅 | 成人不卡 | 国产av无码专区亚洲av | 成人h片在线观看 | 久久久久国产精品夜夜夜夜夜 | 风韵多水的老熟妇 | 亚洲精选免费 | 自拍偷拍亚洲视频 | 国产精品zjzjzj在线观看 | 日韩青青草| 日本精品一区视频 | 成人软件在线观看 | 亚洲国产剧情在线观看 | 嫩草视频在线观看视频 | 日产av在线播放 | 久久久亚洲av波多野结衣 | 在线观看av免费 | 久久精品国产精品亚洲毛片 | 夜夜夜夜爽 | 2一3sex性hd| 日本黄色片视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品久久久久毛片大屁完整版 | 无码人妻久久一区二区三区 | 一级女性全黄久久生活片免费 | 99在线视频播放 | 国产精品久久久久久久久久久久久久 | 精品人妻在线一区二区三区 | 视频一区二区三区在线 | 91精品国产色综合久久不8 | 蜜臀久久精品久久久久 | 黄色www视频 | 国产一级片黄色 | 成人精品久久久午夜福利 | 一级黄色淫片 | 夜夜伊人 | 欧美精品一区二区在线播放 | 国产欧美色图 | 国产精品男女 | 少妇高潮惨叫久久久久久 | a级在线播放 | 日韩一区二区三区四区 | av软件在线观看 | 人妻在卧室被老板疯狂进入 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 毛片动态图 | av免播放器在线观看 | 久久久久久久久亚洲 | 欧美一区二区三区四区在线 | 中文字幕一区二区三区精华液 | 国产亚洲精品精品国产亚洲综合 | 国产91综合一区在线观看 | 好吊妞在线 | 免费在线性爱视频 | 亚洲第一精品在线 | 91成年视频| 欧美视频www | 高清一区二区三区四区 | 欧美xxxxbbb | 狠狠干天天色 | 1024手机看片日韩 | 日韩六九视频 | 97视频人人 | 精品久久久999 | 色播开心网 | 中文成人无字幕乱码精品区 | 午夜视频在线瓜伦 | 日本成片网 | 捅肌肌| 天堂资源地址在线 | 欧美夫妻性生活视频 | 日本a级c片免费看三区 | 欧美顶级少妇做爰 | 国产美女福利在线 | 被扒开腿一边憋尿一边惩罚 |