用Java中的一个循环解决codingBat Post4

时间:2014-06-01 11:19:41

标签: java

问题是关于在Java中解码来自codingBat的this问题。

问题陈述:

给定一个非空的int数组,返回一个新数组,其中包含原始数组中最后4个之后的原始数组中的元素。原始数组将包含至少一个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个循环。它应该使用最多一个循环来解决。不要使用集合或任何包装类。

8 个答案:

答案 0 :(得分:7)

  • 在迭代之前创建结果数组,假设长度为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;
}

答案 1 :(得分:0)

您可以使用类Arrays ......即:

public int[] post4(int[] nums) {
    int lastFourIndex = 0;
      for (int i = 0; i < nums.length; i++) {

          if(nums[i] == 4)
          {
              lastFourIndex = i;
          }
    }
      return Arrays.copyOfRange(nums, lastFourIndex+1, nums.length);
}

安吉洛

答案 2 :(得分:0)

post4问题解决方案代码:

我已经尝试过这段代码并且完美无缺。在IDE上试试这个。

public int[] m1(int[] nums) {
    int c = 0;
    for (int i = 0; i < nums.length;) {
        if(nums[i]!=4){
            i= i+1;
        }
        else if(nums[i] == 4){
             c = i;
            i = i+1;
        }
    }
    int count = 0;
    for (int i = c+1; i < nums.length; i++) {
        if(nums[i]!=4){
            count = count+1;
        }
        else 
            break;
    }
    int b[] = new int[count];
    int j = 0;
    for (int i = c+1; i < nums.length; i++) {
        b[j] = nums[i];
        j++;
    }
    return b;
}

答案 3 :(得分:0)

  public int [] post4(int [] nums){&#xA; int i = 0;&#xA;&#xA; int a = 0;&#xA;&#xA; for(i = 0; i&lt; nums.length; i ++){&#xA;&#xA; if(nums [i] == 4){&#xA; a = i;&#xA; }&#XA;&#XA; }&#XA;&#XA; int ab [] = new int [nums.length  -  a  -  1];&#xA;&#xA; for(int k = 0; k&lt; nums.length  -  a  -  1; k ++){&#xA; ab [k] = nums [a + k + 1];&#xA; }&#XA;&#XA;返回ab;&#xA;&#xA;}&#xA;  
&#xA;

答案 4 :(得分:0)

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

  int count = nums.length;

  for(int i = nums.length-1; i >= 0; i--){

    if(nums[i] != 4) count--;

    if(nums[i] == 4){

      int[] res = Arrays.copyOfRange(nums, count, nums.length); 
      return res;

    }  
  }  
return nums;  
}

答案 5 :(得分:0)

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

        int[] res = new int[0];

        int size = 0;

        boolean go = true;

        for(int i =0;i<nums.length;i++){
          if(go){
          if(nums[i]!=4) size++;
          else{
            res = new int[size];
            go = false;
            i=0;
          } 

        }
        if(!go&&size>0){
          res[i] = nums[i];
          if(i==size-1) break;
        }
    }
    return res;
}

答案 6 :(得分:0)

    int arr[] = new int[0];
    boolean found = false;
    //made by botosjano
    int j = 0;
    for (int i = nums.length-1; i >= 0; i--) {
        if (!found && nums[i] == 4) {
            found = true;
            arr = new int[j];
            i = nums.length - 1;
        }
        if(!found)
            j++;
        if (found && j > 0) {
            j--;
            arr[j] = nums[i];
        }
    }
    return arr;

答案 7 :(得分:-1)

public int[] post4(int[] nums) {
  int count = 0;

  for(int i = nums.length - 1 ; i >= 0; i -- ) {
     if(nums[i] == 4 ) {
        count = i;
        break;
     }
  }

  int[] result = new int[nums.length - (count + 1)];

   for (int i = count + 1, j = 0; i < nums.length; i++, j++) {
       result [j] = nums[i];
   }


  return result;
}