1. ホーム
  2. java

[解決済み] JavaでcodingBat Post4を1ループで解く

2022-02-26 18:12:32

質問

解答についての質問です。 これ の問題をJavaでcodingBatしています。

問題文です。

int の空でない配列が与えられたとき,元の配列の最後の 4 の後に来る要素を含む新しい配列を返します.元の配列には、少なくとも 1 つの 4 が含まれます。なお、Java では長さ 0 の配列を作成することも可能です。

post4({2, 4, 1, 2}) → {1, 2} となります。

post4({4, 1, 4, 2}) → {2} となります。

post4({4, 4, 1, 2, 3}) → {1, 2, 3}となります。

以下は私の解答です。

public int[] post4(int[] nums) {

int lastFour=-1;
int[] post4={};

  for(int i=nums.length-1;i>=0;i--)
  {
     if((nums[i]==4))
     {
       lastFour=i;    //find the index of the last 4 in the array
       break;
     }  
   } 
   int newLen=(nums.length-lastFour)-1;
   post4=new int[newLen];   //reassign the post4 array with required length

  for(int j=0;j<newLen;j++)
  {
     post4[j]=nums[lastFour+1];   //assign values from orig. array after last 4
     lastFour++;
  }

  return post4;   
}

しかし、私は2つのループを使用しています。最大でも1つのループで解決する必要があります。コレクションやラッパーのクラスは使わないでください。

どのように解決するのですか?

  • 反復処理の前に、長さ0とする結果配列を作成します。
  • を見つけるたびに 4 のインデックスに基づいた大きさの新しい結果配列を作成します。 4 の長さと nums で残りの要素を格納します。
  • でない場合は 4 を結果配列に配置します(結果配列の長さが 0 は見つからなかったということだからです。 4 の最後の要素であるか、あるいは nums の配列)になります。

以下は解決例です。

public int[] post4(int[] nums) {

    int[] result = new int[0];

    int j = 0;
    for (int i = 0; i<nums.length; i++){
       if (nums[i] == 4) {
           result = new int[nums.length - i-1];
           j=0;
       }
       else 
           if (result.length>0) result[j++] = nums[i]; 
    }

    return result;
}