编写一个方法,返回数组中最后一个值的索引,该值是3的倍数。
例如,在阵列中
[4,7,9,7,12]三的最后一个倍数是"12",出现在索引4处。
到目前为止,这是我的代码。有人能帮我修改代码吗?
public int findMultipleOfThree(int[] arr)
{
int result = 0;
for (int i = arr.length-1; i > 0; i--)
{
if(i%3==0)
{
result = arr[i];
}
}
return result;
}
我知道这远远不是正确的答案。请帮助
问题
你已经切换了比较和结果的元素,你需要
- 检查值
if (arr[i] % 3 == 0)
- 返回标记
result = i
解决方案
-
最佳:你可以从最后开始,并返回第一个匹配,你做最小迭代
public static int findMultipleOfThreeBackward(int[] arr) { for (int i = arr.length - 1; i > 0; i--) { if (arr[i] % 3 == 0) { return i; } } return -1; }
-
您可以从头开始,并覆盖
result
以返回最后一个public static int findMultipleOfThreeForward(int[] arr) { int result = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] % 3 == 0) { result = i; } } return result; }
注意
我还建议使用-1
,因为它是一个无效的索引,它表明您没有找到任何与条件匹配的值
您的解决方案几乎可以工作了!你需要增加一个休息时间,但我看到其他人已经注意到了这一点。这里有另一种简单的方法(并不总是最有效的(遍历整个数组,并检查当前元素是否为3的倍数。将最大索引存储在变量中,并在每次找到较大值时进行更新。返回arr[max_index]。代码应该是这样的,希望我能帮助你。
public static int findMultipleOfThree(int[] arr)
{
int max_index = -1; //if it does not find a multiple of 3 it will return -1
for (int i = 0; i < arr.length-1; i++)
{
if(arr[i]%3==0)
{
if(i>max_index)
max_index = i;
}
}
return arr[max_index];
}
差不多可以了,你应该在这行后面放一个中断:
result = arr[i];
改变这个:
i%3==0
进入这个:
arr[i]%3==0
因此,你肯定会找到最后一个。此外,你的i应该从arr.length-1变为i>0,因为列表从0 开始
更新到此:
public class Testing {
public static void main(String[] args) {
int[] arr = new int[] { 4, 7, 9, 7, 12 };
System.out.println(findMultipleOfThree(arr));
}
public static int findIndexMultipleOfThree(int[] arr) {
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 3 == 0) {
index = i;
}
}
return index;
}
}
输出:
4
只需反向循环这些值,并在找到倍数后立即返回。如果没有找到任何内容并且循环已完成,则返回-1
。此外,您可以修改方法签名以传递任何多个值,例如3
。
public class HelloWorld {
public static void main(String... args) {
int[] values = { 4, 7, 9, 7, 12 };
System.out.println(findIndexForLastMultipleOf(3, values)); // 4
}
public static int findIndexForLastMultipleOf(int target, int... values) {
for (int i = values.length - 1; i >= 0; i--) {
if (values[i] % target == 0) {
return i;
}
}
return -1;
}
}
如果您定位的是一个值,而不是一个索引,您会返回什么?您应该将int
框化成Integer
,如果没有倍数,则返回null
。如果您决定对数组进行流式过滤,也可以返回一个Optional<Integer>
。
public class MathUtils {
public static void main(String... args) {
int[] values = { 4, 7, 9, 7, 12 };
System.out.println(findLastMultipleOf(3, values)); // 12
}
public static Integer findLastMultipleOf(int target, int... values) {
for (int i = values.length - 1; i >= 0; i--) {
if (values[i] % target == 0) {
return values[i];
}
}
return null;
}
}