diff --git a/solution/0100-0199/0135.Candy/README.md b/solution/0100-0199/0135.Candy/README.md index fff5914d6a0c6..ccd2a788a985a 100644 --- a/solution/0100-0199/0135.Candy/README.md +++ b/solution/0100-0199/0135.Candy/README.md @@ -111,6 +111,36 @@ class Solution { } ``` +```java +class Solution { + public int candy(int[] ratings) { + int n = ratings.length; + int up = 0; + int down = 0; + int peak = 0; + int candies = 1; + for (int i = 1; i < n; i++) { + if (ratings[i - 1] < ratings[i]) { + up++; + peak = up + 1; + down = 0; + candies += peak; + } else if (ratings[i] == ratings[i - 1]) { + peak = 0; + up = 0; + down = 0; + candies++; + } else { + down++; + up = 0; + candies += down + (peak > down ? 0 : 1); + } + } + return candies; + } +} +``` + ### **C++** ```cpp diff --git a/solution/0100-0199/0135.Candy/README_EN.md b/solution/0100-0199/0135.Candy/README_EN.md index 03198acfef1c1..221a6949c1c7f 100644 --- a/solution/0100-0199/0135.Candy/README_EN.md +++ b/solution/0100-0199/0135.Candy/README_EN.md @@ -102,6 +102,36 @@ class Solution { } ``` +```java +class Solution { + public int candy(int[] ratings) { + int n = ratings.length; + int up = 0; + int down = 0; + int peak = 0; + int candies = 1; + for (int i = 1; i < n; i++) { + if (ratings[i - 1] < ratings[i]) { + up++; + peak = up + 1; + down = 0; + candies += peak; + } else if (ratings[i] == ratings[i - 1]) { + peak = 0; + up = 0; + down = 0; + candies++; + } else { + down++; + up = 0; + candies += down + (peak > down ? 0 : 1); + } + } + return candies; + } +} +``` + ### **C++** ```cpp diff --git a/solution/0100-0199/0135.Candy/Solution.java b/solution/0100-0199/0135.Candy/Solution.java index 0fcbd2d60ca2a..12695f93146a2 100644 --- a/solution/0100-0199/0135.Candy/Solution.java +++ b/solution/0100-0199/0135.Candy/Solution.java @@ -1,24 +1,27 @@ class Solution { public int candy(int[] ratings) { int n = ratings.length; - int[] left = new int[n]; - int[] right = new int[n]; - Arrays.fill(left, 1); - Arrays.fill(right, 1); - for (int i = 1; i < n; ++i) { - if (ratings[i] > ratings[i - 1]) { - left[i] = left[i - 1] + 1; + int up = 0; + int down = 0; + int peak = 0; + int candies = 1; + for (int i = 1; i < n; i++) { + if (ratings[i - 1] < ratings[i]) { + up++; + peak = up + 1; + down = 0; + candies += peak; + } else if (ratings[i] == ratings[i - 1]) { + peak = 0; + up = 0; + down = 0; + candies++; + } else { + down++; + up = 0; + candies += down + (peak > down ? 0 : 1); } } - for (int i = n - 2; i >= 0; --i) { - if (ratings[i] > ratings[i + 1]) { - right[i] = right[i + 1] + 1; - } - } - int ans = 0; - for (int i = 0; i < n; ++i) { - ans += Math.max(left[i], right[i]); - } - return ans; + return candies; } } \ No newline at end of file