欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LintCode求最大平均值子数组

程序员文章站 2022-03-05 13:45:18
...

这个题我深有体会,在事先说明的这段代码在运行时只有34%通过测试,而错误原因我把它归结为系统出错

LintCode求最大平均值子数组

(???????)

我的输出答案是错误的??????????

 

我采用的是暴力遍历法,就每一中可能都去进行比较。当然我看了别人还有二分法,然而我并没有看懂。我的代码如下:

package com.test;
public class ZuiDaPingJunZiShuZu {
	public static void main(String[] args){
		//int arr[] = {1,12,-5,-6,50,3};
		int arr[] = {-1,-2,-3,-100,-1,-50};
		double a = maxAverage(arr,4);
		System.out.println(a);
	}
	/**
	 * 求一个最大子数组,其子数组的长度为k
	 */
	public static double maxAverage(int[] nums, int k) {
		
		int len = nums.length;	//数组长度
		int count = 1;	//数组指针
		double maxSum = 0;	//最大子数组的和
		/*
		 * 先将前k数之和赋给maxSun
		 */
		for (int i = 0; i < k; i++) {
			maxSum += nums[i];
		}
		/*
		 * 主要算法
		 */
		while(count <= len - k){
			//temp每次大循环都要重置,所以在这里新建
			double temp = 0;
			//从第二数开始每k个数求和并赋给temo
			for (int j = 0; j < k ; j++) {
				temp += nums[count+j];
			}
			//比较temp和maxSun的值,记住每次计数器都要向后移一位
			if(temp > maxSum){
				maxSum = temp;
				count++;
			}else{
				count++;
			}
		}
		return maxSum/k;
    }
}