gpt4 book ai didi

java - 查找数组中最大整数的算法

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:40 26 4
gpt4 key购买 nike

我正在尝试创建一个返回 int 的方法 - 已发送数组中最大整数的值。我希望此方法工作的方式是在 for 循环中检查数组的第一个 最后一个元素,然后一直到中间。所以 i = 第一个整数,k = 最后一个整数。当 i = 0, k = n-1 (索引),当 i = 1, k = n-2 如果你明白我的意思。在每个循环中,它都需要检查 if a[i]>a[k]。然后他们交换位置。然后我知道最大的数字在数组的前半部分,然后我希望它检查那一半,所以最终最大的 int 在索引 0 处。

我试过这样的:

public static int maxOfArray(int[] a)
{
int length = a.length;

if(length<1)
throw new NoSuchElementException("Not at least one integer in array");

while (length > 1)
{
int k = length;

for(int i = 0; i < length/2; i++)
{
k--;

if(a[i]<a[k])
{
int j = a[i];
a[i] = a[k];
a[k] = j;
}
}
length /=2;
}
return a[0];
}

..但我真的不明白..我很难“想象”这里发生了什么..但它并不总是有效..(尽管有时)。

编辑另外:数组{6,15,2,5,8,14,10,16,11,17,13,7,1,18,3,4,9,12};会吐出17为最大数。我意识到我必须修复奇数长度的错误,但我想先解决这个偶数长度的数组..

最佳答案

一个错误是当遇到length 是奇数时。

在这些情况下,您“错过”了中间元素。

示例:对于输入 int[] arr = { 8, 1, 5, 4, 9, 4, 3, 7, 2 }; - 元素 9 将与自身进行比较和检查,但随后您减小了 length 的大小,从接下来要迭代的数组中排除了 9 .

我相信可以通过将问题减少到 ceil(length/2) 而不是 length/2 来解决(并处理 length= 的特殊情况=1)

评论中提到的另一个问题是:您需要迭代到length/2而不是length,否则你正在超越自己。

最后 - 标志错误

if(a[i]>a[k])

应该是

if(a[i]<a[k])

请记住 - 如果第一个元素比第二个元素小,您正在尝试交换元素,以便将较大的元素推到数组的头部。

关于java - 查找数组中最大整数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12368240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com