今天經營著世界最大的搜索業務的某公司在位于廣州市海珠區珠江河畔的某著名大學開了一次招聘會,申請實習軟件工程師的都要筆試。于是我也去寫了,雖然我不是位于廣州市海珠區珠江河畔的某著名大學的學生,反正人人都能去。
第一道題,把字符串中相連的重復字符處理成一個。例如aaabbcddcc處理成abcdc。因為寒假的時候才往Vczh Free Script 2.0中添加了一個Mark-Compact Collector,因此算法也就模仿了一下Mark-Compact Collector,也就是把所有該刪掉的字符換成'\0',依次讀取并跟右邊最近的非'\0'字符置換一直到完。
第二道題,已知數列中有1、2、3三種數字,并且可以兩兩置換。求最小置換次數的方法讓數列遞增。 我用了這樣的方法:
·找到并保存每一個位置中應該存放的數字,也就是一1、2、3的數目都跟數列相同的遞增數列bi。
·遍歷ai,找到ai≠bi的i并做如下處理:
·尋找aj使得j>i且bi=aj且bi≠bj
·在這些j中尋找k使得bk=ai
·如果k非空則讓m∈k,否則讓m∈j并讓下一步的k的勢最大
·置換ai和am
一個好像很和諧但是事實上不知道和諧不和諧的證明:
j>i且bi=aj且bi≠bj這個條件是必定滿足的。如果不滿足,則很容易證明ai和bi中1、2、3的數目不完全相同。
k非空使得一次置換產生了兩個正確的結果。
對于每一次置換,如果讓m1∈j且{m1}∩k為空,m2∈k,則有
選擇m1而不是m2有可能減少、保持或增大下一次置換中k的勢;
選擇m2則下一次置換中k的勢不變。
這樣的話,選擇m1最好的結果就是讓這次置換不影響全部的置換,最壞的結果是增加了置換的次數;
選擇m2則不會影響全部的置換。
因此只需每一次都盡量選擇m2中的值,對于k∩j為空的情況,則計算所有j得到的下一步的k的勢dj,選擇最大的j即可。
第三道題,華容道解謎器。只好弄了個寬度優先搜索。
以上純屬YY。
P.S.
·選擇題里面有一道問ABCDEFGHIJ的全排列中滿足A在B前面的數量有多少?答案:因為A和B是對稱的,因此對于任意一個確定的A和B的位置的集合,A在B前的概率是0.5,因此答案為10!/2。
·同時擁有操作系統、開發工具、數據庫引擎、辦公軟件、游戲平臺等多項業務的某著名軟件公司的招聘活動我也參加了一次,結果發現經營著世界最大的搜索業務的某公司和同時擁有操作系統、開發工具、數據庫引擎、辦公軟件、游戲平臺等多項業務的某著名軟件公司【好像】有一個特點。經營著世界最大的搜索業務的某公司喜歡出最優解題目,同時擁有操作系統、開發工具、數據庫引擎、辦公軟件、游戲平臺等多項業務的某著名軟件公司喜歡出最高速題目。而且經營著世界最大的搜索業務的某公司很喜歡去在位于廣州市海珠區珠江河畔的某著名大學,而同時擁有操作系統、開發工具、數據庫引擎、辦公軟件、游戲平臺等多項業務的某著名軟件公司則很喜歡去位于廣州市五山的某著名理工大學。
posted on 2008-05-12 10:59
陳梓瀚(vczh) 閱讀(2428)
評論(0) 編輯 收藏 引用 所屬分類:
C++