patternjavaMinor
Identifying array elements, rearranging them, and replacing them
Viewed 0 times
rearrangingelementsarrayreplacingandthemidentifying
Problem
I am completing the CodingBat exercises for Java, and, having learnt from the answers to the previous one, I completed the one that follows:
Return a version of the given array where all the
Here is my code:
Please bear in mind I am doing these without importing anything extra like
I was taking influence from the comments I received on the previous question, by using a
How could this be optimised? Is it ok to begin another loop only for the circumstance of
I played around with setting
Return a version of the given array where all the
10s have been removed. The remaining elements should shift left towards the start of the array as needed, and the empty spaces a the end of the array should be 0. So {1, 10, 10, 2} yields {1, 2, 0, 0}. You may modify and return the given array or make a new array. Here is my code:
public int[] withoutTen(int[] nums) {
int slow = 0;
for (int fast = 0; fast = slow; i--) {
nums[i] = 0;
}
}
}
return nums;
}Please bear in mind I am doing these without importing anything extra like
java.util.Arrays etc., as, primarily, this is not accepted by the assessor and, secondarily, I want to get to grips with arrays without importing anything extra yet.I was taking influence from the comments I received on the previous question, by using a
fast and slow variable for looping through the array, and limiting the code to one main for loop, for the sake of making my code generally better and putting efficiency into practice.How could this be optimised? Is it ok to begin another loop only for the circumstance of
fast reaching the last element in the array? It feels like I am repeating myself by saying "if we get to the last element..." because we absolutely will do anyway. I played around with setting
fast outside the loops, so that the second for loop can begin after the first (as opposed to nesting it). At that point, fast would be set to the last value anyway from having completed the previous loop, but more and more values would be set outside the loops. Which way makes more sense?Solution
It's extraordinarily confusing to have
So let's use comments to mark these in distinct blocks. And, let's move the second part to its own loop.
And while we're at it, let's make the method more generic to replace any number with another given number.
if (fast == nums.length - 1) as a conditional within a loop that continues while `fast - Zero-ing out the tens.
So let's use comments to mark these in distinct blocks. And, let's move the second part to its own loop.
And while we're at it, let's make the method more generic to replace any number with another given number.
public int[] replaceNum(int[] nums, int eliminationNum, int replaceNum) {
int nextMoveIndex = 0;
// shuffle non-elims to the front
for (int i = 0; i < nums.length; ++i) {
if (nums[i] != eliminationNum) {
nums[nextMoveIndex++] = nums[i];
}
}
// zero out the elimination number
while (nextMoveIndex < nums.length) {
nums[nextMoveIndex++] = replaceNum;
}
return nums;
}Code Snippets
public int[] replaceNum(int[] nums, int eliminationNum, int replaceNum) {
int nextMoveIndex = 0;
// shuffle non-elims to the front
for (int i = 0; i < nums.length; ++i) {
if (nums[i] != eliminationNum) {
nums[nextMoveIndex++] = nums[i];
}
}
// zero out the elimination number
while (nextMoveIndex < nums.length) {
nums[nextMoveIndex++] = replaceNum;
}
return nums;
}Context
StackExchange Code Review Q#87023, answer score: 6
Revisions (0)
No revisions yet.