LeetCode-Algorithms-[Easy]1176. 健身计划评估

1176. 健身计划评估

例子给的误导人——有个要点是k天能不能重叠,以测试用例来说是可以的

实际上例子3应该再加一个

calories[1]+calories[2]=5=upper

不能重叠时,使用递归的解法(因为不能AC,所以不知道对不对,权当个思路)

	public int dietPlanPerformance_2(int[] calories, int k, int lower, int upper) {
		int n = calories.length;
		return dietPlanPerformance(calories, k, lower, upper, 0, calories.length - 1, n);
	}

	private int dietPlanPerformance(int[] calories, int k, int lower, int upper, int i, int j, int n) {
		if (i >= n)
			return 0;
		if (i + k - 1 >= n)
			return 0;
		if (j - i + 1 == k) {
			int sum = 0;
			for (; i <= j; i++) {
				sum += calories[i];
			}
			if (sum < lower)
				return -1;
			else if (sum > upper)
				return 1;
			else {
				return 0;
			}
		}
		int sum1 = dietPlanPerformance(calories, k, lower, upper, i, i + k - 1, n);
		int sum2 = dietPlanPerformance(calories, k, lower, upper, i + k, j, n);
		return sum1 + sum2;
	}

AC的写法

	public int dietPlanPerformance(int[] calories, int k, int lower, int upper) {
		int n = calories.length;
		int sum = 0;
		for (int i = 0; i < n; ++i) {
			int point = getPoint(calories, k, lower, upper, i, n);
			sum += point;
		}
		return sum;
	}

	private int getPoint(int[] calories, int k, int lower, int upper, int i, int n) {
		if (i + k - 1 >= n)
			return 0;
		int sum = getSum(calories, k, i, n);
		if (sum > upper)
			return 1;
		else if (sum < lower)
			return -1;
		return 0;
	}

	private int getSum(int[] calories, int k, int i, int n) {
		int sum = 0;
		for (int index = i; index < i + k; ++index) {
			sum += calories[index];
		}
		return sum;
	}
发布了272 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/m0_37302219/article/details/105468321