这是App Academy入学挑战中的问题之一。它们并不难,但是我在Java方面的知识非常有限,因此花费的时间比平时长。我遇到的问题是:给定一个数字数组和一个目标数字,如果数组中的元素是目标数字的倍数,则以数组格式返回它们。例如:{7,12,9,9,5,15},3只会返回12,9,15
我的思考过程:我将只有一个空数组,其元素与传入的数组相同。创建一个count变量以增加临时数组。循环并分配值。为输出创建一个与方法相同类型的新变量,并将所有内容从temp数组传递到新数组。返回。
我觉得有一种更简单的方法可以执行此操作,但我不知道如何查找/查找什么。
public static Integer[] multipleSelect(Integer[] nums, int target) {
int [] temp = new int[nums.length];
int count = 0;
for(int x = 0; x < nums.length; x++)
{
if(nums[x] % target == 0)
{
temp[count] = nums[x];
count++;
}
}
Integer[] output = new Integer[count];
for(int y = 0; y < count; y++)
{
output[y] = temp[y];
}
return output;
}
网站接受了这个,但我却不太喜欢。我该如何改善?
答案 0 :(得分:2)
好吧,您可以使用数组列表来提高程序的空间复杂度,当您的条件满足时,可以将值追加到列表中以提高第一个数组的空间复杂度,然后如果执行上述代码,则可以转换数组列表,按
Integer[] output = {name of arraylist}.toArray();
然后您可以从函数中返回此数组
答案 1 :(得分:1)
只要您可以使用Java 8或更高版本,这就是使用Stream的理想之地,它使您可以单行执行所需的操作:
import java.util.Arrays;
public class X {
public static Integer[] multipleSelect(Integer[] nums, int target) {
return Arrays.stream(nums).filter( x -> x % target == 0).toArray(Integer[]::new);
}
public static void main(String[] args) {
Integer[] input = new Integer[] {7, 12, 9, 5, 15};
Integer[] output = multipleSelect(input, 3);
for (Integer i : output)
System.out.println(i);
}
}
结果:
12
9
15
答案 2 :(得分:0)
您可以使用两个递增值来删除第二个数组和循环,其中$ i表示输入数组的当前索引,$ j表示输出中的索引。 如上/下所述,您将从输出中使用arraylist或非固定长度数据类型中受益。