簡體   English   中英

Google coding challange 工作調度代碼

[英]Google coding challange work scheduling code

我有一個谷歌 foobar 挑戰:

編寫一個名為 answer(data, n) 的 function,它接受少於 100 個整數的列表和一個數字 n,並返回相同的列表,但所有出現次數超過 n 的數字都被完全刪除。 返回的列表應保留與原始列表相同的順序 - 您不想混淆那些精心計划的輪班輪換,例如,如果數據為 [5, 10, 15, 10, 7] 並且 n 為 1, answer(data, n) 將返回列表 [5, 15, 7] 因為 10 出現了兩次。 因此完全從列表中刪除。

這是我的回答:

    public static int[] solution(int[] data, int n) {
        // Your code here
        int count,c=0;
        int flag[]=new int[1000];
        int b[]=new int[data.length];
        for(int i=0;i<data.length;i++)
        {   count=0;
            if(flag[(data[i])]==0)
            {
                for(int j=0;j<data.length;j++)
                {
                    if(data[i]==data[j])
                        count++;
                }
                if(count>n)
                    flag[(data[i])]=1; 
                else
                {
                    flag[(data[i])]=2;
                    b[c++]=data[i];
                }
            }
            else if(flag[(data[i])]==2)
            {
                b[c++]=data[i];
            }
        }
        if(c==(data.length))
        {
            return b;
        }
        if(c==0)
        {
            int ne[]=new int[0];
            return ne;
        }
        else
        {
            int ne[]=new int[c];
            for(int k=0;k<c;k++)
            {
                ne[k]=b[k];
            }
            return ne;
        }
    }

它通過了 8 個測試用例,但最后一個測試用例失敗了,我無法弄清楚測試用例可能是什么,因為那個是隱藏的用例。 任何的想法?

通常,在嘗試查找問題時,您會運行測試。 我把你的代碼片段變成了我可以寫的 class。

我格式化了你的代碼,以便更清楚地看到你在做什么。 使用更具描述性的變量名稱會有所幫助。 另外,不要依賴不需要大括號的 if 或 for 循環的單個語句。 第一次嘗試添加一行代碼時,忘記了大括號,祝調試順利。

這是我創建的測試 class。 在嘗試了大約兩打不同的 N 值和輸入值后,我找不到任何東西。

import java.util.Arrays;

public class GoogleChallenge {

    public static void main(String[] args) {
        int[] data = { 5, 10, 15, 10, 7, 888, 999, 999, 0 };
        int n = 1;
        System.out.println("input: n: " + n + " " + Arrays.toString(data));
        System.out.println("Output: " + Arrays.toString(solution(data, n)));
    }

    public static int[] solution(int[] data, int n) {
        // Your code here
        int count, c = 0;
        int flag[] = new int[1000];
        int b[] = new int[data.length];
        for (int i = 0; i < data.length; i++) {
            count = 0;
            if (flag[(data[i])] == 0) {
                for (int j = 0; j < data.length; j++) {
                    if (data[i] == data[j]) {
                        count++;
                    }
                }
                if (count > n) {
                    flag[(data[i])] = 1;
                } else {
                    flag[(data[i])] = 2;
                    b[c++] = data[i];
                }
            } else if (flag[(data[i])] == 2) {
                b[c++] = data[i];
            }
        }
        
        if (c == (data.length)) {
            return b;
        }
        
        if (c == 0) {
            int ne[] = new int[0];
            return ne;
        } else {
            int ne[] = new int[c];
            for (int k = 0; k < c; k++) {
                ne[k] = b[k];
            }
            return ne;
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM