问题是关于在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个循环。它应该使用最多一个循环来解决。不要使用集合或任何包装类。
答案 0 :(得分:7)
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;
}