'Solving codingBat Post4 with one loop in Java
The question is about Solving this problem from codingBat in Java.
Problem Statement:
Given a non-empty array of ints, return a new array containing the elements from the original array that come after the last 4 in the original array. The original array will contain at least one 4. Note that it is valid in Java to create an array of length 0.
post4({2, 4, 1, 2}) → {1, 2}
post4({4, 1, 4, 2}) → {2}
post4({4, 4, 1, 2, 3}) → {1, 2, 3}
Here is my solution:
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;
}
But I have used 2 loops. It should be solved using at max one loop. Do not use collections or any wrappers classes.
Solution 1:[1]
- Before iteration create result array, lets say with length 0.
- Each time you find
4
create new result array with size based on index of that4
and length ofnums
to store rest of elements. - If number is not
4
place it in result array (don't place if result arrays length is0
because it means we didn't find any4
yet, or it was last element ofnums
array).
Here is example solution
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;
}
Solution 2:[2]
You may use the class Arrays...that is:
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);
}
Angelo
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Angelo Immediata |