線上程式面試的進行方式 Profit Targets A Financial Analyst Is Responsible For A Portfolio Of Profitable Stocks Represented In An Array

me
林彥成
2022-01-07 | 2 min.
文章目錄
  1. 1. Pair Programming
  2. 2. 問題理解
  3. 3. 解題技巧與步驟

小編過去半年參加過兩次線上面試都有線上程式面試,過程上會透過現有的平台去進行。

會想分享的原因是有種回到前幾年到群暉面試的感受,這次面試的主角是一間叫 Linker Networks 的公司以 hacker rank 當互動平台,面試下來的感覺是工程師強度比 HPE 高,覺得還蠻神奇的。

hacker rank 這半年內目前考過兩次,台積電、Linker Networks 都是用這個平台,看起來是都會出三題,有一題會包含時間複雜度的計算。

Pair Programming

面試的進行方式會是 Pair Programming,會在一個畫面上共同完成程式碼。一個人輸入,而另一個人看。輸入的人稱作駕駛員,審查的人稱作觀察員。觀察員同時考慮改善方向,提出改進的意見或將來可能出現的問題進行處理。

問題理解

以下是原文的問題,我在聖誕節那週一次寫了兩間公司總共七題完全忘記自己寫過,加上刷題經驗不到十題,重新看了一下題目後來發現怎麼已經有答案了,對方表示這題你之前寫過了 XDDD 只是答案有些有錯,加上運算時間有點過長,我們現在一起來看一下。

A financial analyst is responsible for a portfolio of profitable stocks represented in an array. Each item in the array represents the yearly profit of a corresponding stock. The analyst gathers all distinct pairs of stocks that reached the target profit. Distinct pairs are pairs that differ in at least one element. Given the array of profits, find the number of distinct pairs of stocks where the sum of each pair’s profits is exactly equal to the target profit.

實際上就是要找出一個 unique pair 的和是固定的,所以描述一堆敘述都是浮雲。


圖片來源: https://media.cheggcdn.com/


圖片來源: https://media.cheggcdn.com/

解題技巧與步驟

通常就是直接看 Example 理解一下到底實際上在做什麼,有沒有防呆要處理。

stocksProfit = [5, 7, 9, 13, 11, 6, 6, 3, 3]

target = 12 profit’s target

There are 4 pairs of stocks that have the sum of their profits equals to the target 12 . Note that because there are two instances of 3 in stocksProfit there are two pairs matching (9, 3): stocksProfits indices 2 and 7, and indices 2 and 8, but only one can be included.
There are 3 distinct pairs of stocks: (5, 7), (3, 9), and (6, 6) and the return value is 3.

解題上: 我剛開始也是寫雙層迴圈,且存起來的是 pairedIndexes 所以跑出來的結果就不會是 unique pair,後來修正了一下改成 pairedValues 後就又過了一些測試。

效能上: 如果是用 Array 來儲存搭配 indexOf 來判斷,運算的時間複雜度就會提高,這時候還是需要寫 for 迴圈想辦法讓不需要跑的地方中斷還有將 Array 改成物件或是 Map 來儲存。

在解題上要多考量的點

  • 是否有多跑的迴圈、遞迴
  • 資料儲存型態
  • 判斷條件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
* Complete the 'stockPairs' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER_ARRAY stocksProfit
* 2. LONG_INTEGER target
*/

function stockPairs(stocksProfit, target) {
// Write your code here
const pairedValues = {};
let count = 0;

for (let i = 0; i < stocksProfit.length; i += 1) {
//stocksProfit[0] = 5
if (!pairedValues[stocksProfit[i]]) {
for (let j = i + 1; j < stocksProfit.length; j += 1) {
// stocksProfit[1] = 7
if (stocksProfit[i] + stocksProfit[j] === target) {
// console.log('pairedValues', pairedValues);
if (
!pairedValues[stocksProfit[i]] &&
!pairedValues[stocksProfit[j]]
) {
pairedValues[stocksProfit[i]] = true;
pairedValues[stocksProfit[j]] = true;
count += 1;
break;
}
}
}
}
}
return count;
}

喜歡這篇文章,請幫忙拍拍手喔 🤣

share