下了班立馬趕往深圳北站,下著大雨又坐過了站,著急地跑向對面的站牌,匆忙間搞得滿頭大汗。好不容易坐上了高鐵,休息片刻,終於有時間整理一下前兩天面試cvte 時遇到的兩道演算法題。
1. 在陣列中尋找和為固定值的兩個數字
這道題目是一面的時候乙個女面試給出的最後乙個面試問題。題目的大概意思如上,資料不一定有序,而且要求是在o(n) 的時間內找到答案。對於常年混跡leetcode 的人來說,這是一道再簡單不過的題目了。但是很不湊巧,我基本上沒刷過leetcode,平時做演算法題的機會也不多,感覺對於前端來說,常年寫業務邏輯和ui 都寫傻了。所以想了好一會還只是給出了乙個不太讓人滿意的答案。
我給出的解決方案是先對陣列進行排序,然後通過雙指標遍歷陣列元素,這樣的話就可以在o(nlogn) 的時間複雜度內找到答案。但是這種做法一方面時間複雜度不是最優,另一方面只能找出和為固定值的兩個數字而丟失了它們的下標。面試完後,請教了乙個後端的朋友,最終利用乙個物件(雖然我沒有物件,哈哈哈,好冷)成功地在o(n) 的時間複雜度內找到了和為固定值的兩個數字以及它們的下標,實現**如下:
var arr = [3, 1, 4, 2, 5, 7, 7];
// 遍歷陣列,如果當前元素在目標物件中,則將這兩個數字取出並新增到最終結果中
// 如果不存在,則將當前元素新增到目標物件中
function twosum(arr, target) ,
res = {},
index = 0;
for(var i = 0, len = arr.length; i < len; i++) else
}console.log(res);
};twosum(arr, 9);
2. 螺旋式內向輸出5 * 5 的二維陣列
說實話,一看到這個題是有點蒙的,規律很容易看出來但是似乎不太好實現。走走停停地寫了將近半個小時,最後被面試官喊停了。到了那會實現的邏輯心裡已經有個大概了,只是就像面試官說的一樣,**的準確性實在不敢恭維。不過這個面試官還好,還會讓我說一下實現的思路,並且我在說的時候他能及時的給予反饋。總得來講,雖然給的兩道題目做的都不是太好,但是整體的面試過程還是蠻愉快的。咳咳,那啥,走題了。下面來看看這個題應該怎麼做,就現在而言,雖然做出來了,但是感覺**還是有點多,一時半會也想不出什麼好的辦法來,就說說現在的解法吧。
首先需要有乙個換向的機制,每次走到盡頭需要根據當前情況調整方向並適當調整賦值策略,這個換向機制可以通過設計模式中的策略模式來實現。其次要有很多變數分別來代表換向的步數、當前的步數、換向步數是否需要減
一、當前的座標和最終的輸出結果等,最後的**如下(火車快到站了,來不及解釋了,自己去看吧):
function printstr(num) ,
// 轉向步數
changenum = 5,
// 轉向步數遞減標誌位
changeflag = 1,
// 目前步數
nowcount = 0,
// 控制方向
directionindex = -1,
// 當前座標
xy = ,
// 不同方向的操作,使用策略模式實現
direction = ,
'1': function (obj, xy, num) ,
'2': function (obj, xy, num) ,
'3': function (obj, xy, num)
}// 初始化陣列
for(var i = 0; i < 5; i++)
// 初始化第一行
for(var j = 0; j < 5; j++)
// 走過了,往回撤一步
xy.y -= 1;
// 遍歷剩下的資料
for(var k = num + j; k <= 25; k++) else
// 輪流變換方向
directionindex = (directionindex + 1) % 4;
nowcount = 0;
}direction[directionindex](arrobj, xy, k);
nowcount++;
} // 列印
printwithn(arrobj);
}// 按行列印
function printwithn(obj)
}// 啟動函式
printstr(1);
兩道面試演算法題
最近面試 兩道演算法題 說難不難 要寫全對也不容易 很慚愧 我沒有一次寫對 第一道 無序int陣列 找到中位數 void swap int a,int b int get kth number vector num,int k,int start,int end 一次劃分結束 index i if ...
面經 CVTE的兩道筆試程式設計題
晚上狀態有點不好,然後就倉促參加筆試了。前面很多道選擇題,真是坑,都是多選 混雜了多道單選 下面就說說筆試題的兩道程式設計題吧。其實我做的時候也是挺緊張的,隨意符合題意的做完提交,也沒加以優化,其實如果時間允許,我也是蠻想優化下的,不過這 場筆試不是看你優化得有多好,而是看你做對了沒。題目要求 將n...
兩道貪心演算法題
假設有n項物品,大小分別為s 1 s 2 s i sn 其中s i為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及...