前往
大廳
主題

線上程式設計考試Codility測試題

Yang | 2022-09-27 17:07:55 | 巴幣 0 | 人氣 1992

有機會看到一個程式設計測試題,要通過題目給的測試案例(Example test cases)簡單,要通過正確性測試(Correctness test cases)有點難,要通過效能測試(Performance test cases)很難,在此記錄心得

測試題全測試項目通過會得到100分

題目:
輸入整數陣列A(int[] A),找到大於0並且不在A裡面,並且最接近0的正整數,再回傳數值
A的可能長度,1~100000
A的內容值,介於-1000000~1000000之間的整數
時間限制,30分鐘

心得:
1.題目和程式碼都能複製貼上,因此能在自己本機的開發環境上先寫程式和測試,再放到Codility

2.Codility上可以邊修改程式碼邊跑測試案例(Example test cases),但正確性測試(Correctness test cases)和效能測試(Performance test cases)是黑箱,是提交(Submit)後產生,無法再修改程式碼,只能看到測試結果和最後分數,不知道Codility實際做了甚麼測試

3.似乎只能是單執行緒環境,起其他執行緒跑測試案例會提示錯誤

4.通過反覆觀察,正確性測試應該是測試極限情況,A的長度為題目寫的1或100000,內容值為-1000000或1000000,應該都會被測試,因此這部分能在自己的開發環境上先模擬測試

5.要通過效能測試有點挑戰性,已知這部分就是要追求最快效能,因此程式碼就不用顧慮記憶體空間的使用或浪費,用空間換時間就對了

6.發考試的公司應該會對不同題目設定不同時間,時間很趕,幫自己準備能專心做答的環境再上去考試,中間被打斷應該就是考試失敗

7.每個題目都先以完成測試案例為目標,再測試一下題目給的極值或邊界值,應該就能通過正確性測試,效能測試看運氣,在有限時間內要立刻想到題目的效能最佳解不太容易,除非平常就在做這方面的工作,或是先找大量題目練習,鍛鍊感覺

8.可以選擇程式語言做測試,常見的語言都有支援,但這部分應該是看發考試的公司有沒有指定要用甚麼語言

以下暴雷測試題100分的程式碼,想自行挑戰的讀者請勿往下看











class Solution {
    public int solution(int[] A) {

        const int arrLength = 1000002; //通過極值測試發現,方便給right = item + 1用

        int[] _a = new int[arrLength]; //空間換時間

        _a[1] = 1;

        foreach (int item in A)
        {
            if (item <= 0)
            {
                continue;
            }

            _a[item] = 2;

            int left = item - 1;
            int right = item + 1;

            if (left > 1 && _a[left] == 0)
            {
                _a[left] = 1;
            }

            if (_a[right] == 0)
            {
                _a[right] = 1;
            }
        }

        for (int i = 1; i < arrLength; ++i)
        {
            if (_a[i] == 1)
            {
                return i;
            }
        }

        return 1;
    }
}
送禮物贊助創作者 !
0
留言

創作回應

相關創作

更多創作