機能開発(java)


問題の説明



考える

  • ArrayListを使用して戻り値
  • を保存する.
  • 複文と条件文
  • を正しく使用する.

    説明する

    
    import java.util.ArrayList;
    class Solution {
        public int[] solution(int[] progresses, int[] speeds) {
            int cnt =0; // 현재 작업중인 위치 
            ArrayList<Integer> list = new ArrayList<>();
            
            while(cnt !=progresses.length){
                if(progresses[cnt] <= 99){
                    for(int i =cnt; i<progresses.length; i++){
                        progresses[i] += speeds[i];
                    }
                }
                if( progresses[cnt] >= 100){
                    int res =0; // 배포되는 개수 
                    while(progresses[cnt] >= 100){
                        cnt++;
                        res++;
                        if(cnt ==progresses.length) break;
                    }
                    list.add(res);
                }
            }
            int[] ans = new int[list.size()];
            int num =0;
            for(Integer i : list) ans[num++] = i;
            return ans;
            
        }
    }
    2番目のwhileは、ドアを離れるbreak条件を誤って設定し、outofboundメモリエラーを1時間発生させた.
    問題が解決しなかったときは、冷静に私のコードをもう一度読んでみましょう.
    ArrayListは1行のコードでint[]に変換できます.
    int[] ans = new int[list.size()];
    int num =0;
    for(Integer i : list) ans[num++] = i;
    int[] ans = {};
    ans = list.stream().mapToInt(i->i).toArray();

    コードは簡潔になりますが、速度が遅くなるのでfor文を使った変換が有効です.