Java 查找单循环中平均值最小的整数数组中的子数组
给定一个整数数组和子数组的大小,在单循环中找到具有最小平均值的第一个子数组。打印子数组的第一个索引和平均值。问题是我不能在不使用任何附加循环的情况下使用可变子字符串长度c。 我的代码是-Java 查找单循环中平均值最小的整数数组中的子数组,java,arrays,sub-array,Java,Arrays,Sub Array,给定一个整数数组和子数组的大小,在单循环中找到具有最小平均值的第一个子数组。打印子数组的第一个索引和平均值。问题是我不能在不使用任何附加循环的情况下使用可变子字符串长度c。 我的代码是- public void FindFirstSub(int a[], int b, int c) { int average=0,sum=0,leastav=0; for(int i=0;i<a.length-c;i++) { sum = 0; sum
public void FindFirstSub(int a[], int b, int c)
{
int average=0,sum=0,leastav=0;
for(int i=0;i<a.length-c;i++)
{
sum = 0;
sum = a[i]+a[i+1]+a[i+2]; // Here is problem.
System.out.print(a[i]+" "+a[i+1]+" "+a[i+2]+"\n");
average = sum/c;
if(leastav==0)
leastav=average;
else if(leastav>average)
leastav=average;
}
System.out.println("Least average is "+leastav);
}
public void FindFirstSub(inta[],intb,intc)
{
整数平均值=0,总和=0,最小值=0;
对于(int i=0;i平均值)
leastav=平均值;
}
System.out.println(“最小平均值为”+leastav);
}
您需要在for循环之外将sum设置为0,并保持sum的运行总数。在每次迭代中,减去前一个子数组的第一个元素,同时添加新子数组的最后一个元素。在到达第二个子数组之前不应开始减法,也不应在第一个子数组的最后一个索引为“i”之前检查平均值。您不能仅使用单循环来找到最小的平均值,但复杂度可以保持到O(n)。
static void FindFirstSub(int arr[],int n, int k)
{
if (n < k)
return;
int res_index = 0;
int curr_sum = 0;
for (int i = 0; i < k; i++)
curr_sum += arr[i];
// Initialize minimum sum as current sum
int min_sum = curr_sum;
for (int i = k; i < n; i++)
{
// Add current item and remove first
// item of previous subarray
curr_sum += arr[i] - arr[i - k];
// Update result if needed
if (curr_sum < min_sum) {
min_sum = curr_sum;
res_index = (i - k + 1);
}
}
System.out.println("Subarray btw [" +
res_index + ", " + (res_index + k - 1) +
"] has minimum average");
}
// Driver method to test the above function
public static void main(String[] args)
{
int arr[] = { 3, 7, 90, 20, 10, 50, 40 };
int k = 3; // Subarray size
FindFirstSub(arr.length, k);
}
static void FindFirstSub(int arr[],int n,int k)
{
if(n
您似乎忘记问问题了。如果您的c大于a.length怎么办?我不明白您想做什么。在//的行中,这里是问题注释,当i变为length-1时,它将失败。同样正如@MohinuddinLuhar所说,如果c>a长度,它将失败。int b的用法是什么?。你确定你知道你想做什么吗?