使用Java查找数组中3的最后一个倍数



编写一个方法,返回数组中最后一个值的索引,该值是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;
}
}

相关内容

最新更新