算法 【数组】分糖果问题 求解代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 public int candy(int[] arr) { if (arr == null || arr.length == 0) { return 0; } int n = arr.length; int[] candyCount = new int[n]; // 定义数组记录每个孩子最终应分得的糖果数 int ans = 0; // 统计分发糖果的总数量 // 每个孩子至少分得1颗糖果 for(int i=0;i<arr.length;i++){ candyCount[i]=1; } // 从左到右遍历数组,保证相邻孩子中,右侧评分更高的孩子糖果数多于左侧 for(int i=1;i<n;i++){ if(arr[i] > arr[i-1]){ candyCount[i] = candyCount[i-1] + 1; } } // 从右到左遍历数组,保证相邻孩子中,左侧评分更高的孩子糖果数多于右侧 for(int i=n-2;i>=0;i--){ if(arr[i] > arr[i+1] && candyCount[i] <= candyCount[i+1]){ candyCount[i] = candyCount[i+1] + 1; } } // 累加所有孩子的糖果数,得到分发的总数量 for (int i = 0; i < n; i++) { ans += candyCount[i]; } // 返回总糖果数 return ans; }