提供另一个思路 public int house(int[] person) { int n = person.length; if (n == 0) return 0; if (n == 1) return 1; //记录左侧开始的房子数量 int[] left = new int[n]; //记录右侧开始的房子数量 int[] right = new int[n]; left[0] = person[0] > person[1] ? 2 : 1; for (int i = 1; i < n; i++) { if (person[i] > person[i - 1]) left[i] = left[i - 1] + 1; else left[i] = 1; } right[n - 1] = person[n - 1] > person[n - 2] ? 2 : 1; for (int i = n - 2; i >= 0; i--) { if (person[i] > person[i + 1]) right[i] = right[i + 1] + 1; else right[i] = 1; } int total = 0; //取左侧和右侧的最大值 for(int i = 0; i<n; i++){ total += Math.max(left[i], right[i]); } return total; } }