mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
Merge pull request #855 from KailokFung/master
fix(0135): 加了注释,比原先少一次遍历
This commit is contained in:
@ -132,30 +132,33 @@ public:
|
|||||||
Java:
|
Java:
|
||||||
```java
|
```java
|
||||||
class Solution {
|
class Solution {
|
||||||
|
/**
|
||||||
|
分两个阶段
|
||||||
|
1、起点下标1 从左往右,只要 右边 比 左边 大,右边的糖果=左边 + 1
|
||||||
|
2、起点下标 ratings.length - 2 从右往左, 只要左边 比 右边 大,此时 左边的糖果应该 取本身的糖果数(符合比它左边大) 和 右边糖果数 + 1 二者的最大值,这样才符合 它比它左边的大,也比它右边大
|
||||||
|
*/
|
||||||
public int candy(int[] ratings) {
|
public int candy(int[] ratings) {
|
||||||
int[] candy = new int[ratings.length];
|
int[] candyVec = new int[ratings.length];
|
||||||
for (int i = 0; i < candy.length; i++) {
|
candyVec[0] = 1;
|
||||||
candy[i] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 1; i < ratings.length; i++) {
|
for (int i = 1; i < ratings.length; i++) {
|
||||||
if (ratings[i] > ratings[i - 1]) {
|
if (ratings[i] > ratings[i - 1]) {
|
||||||
candy[i] = candy[i - 1] + 1;
|
candyVec[i] = candyVec[i - 1] + 1;
|
||||||
|
} else {
|
||||||
|
candyVec[i] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = ratings.length - 2; i >= 0; i--) {
|
for (int i = ratings.length - 2; i >= 0; i--) {
|
||||||
if (ratings[i] > ratings[i + 1]) {
|
if (ratings[i] > ratings[i + 1]) {
|
||||||
candy[i] = Math.max(candy[i],candy[i + 1] + 1);
|
candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int count = 0;
|
int ans = 0;
|
||||||
for (int i = 0; i < candy.length; i++) {
|
for (int s : candyVec) {
|
||||||
count += candy[i];
|
ans += s;
|
||||||
}
|
}
|
||||||
|
return ans;
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -88,15 +88,15 @@ Java:
|
|||||||
class Solution {
|
class Solution {
|
||||||
public List<Integer> partitionLabels(String S) {
|
public List<Integer> partitionLabels(String S) {
|
||||||
List<Integer> list = new LinkedList<>();
|
List<Integer> list = new LinkedList<>();
|
||||||
int[] edge = new int[123];
|
int[] edge = new int[26];
|
||||||
char[] chars = S.toCharArray();
|
char[] chars = S.toCharArray();
|
||||||
for (int i = 0; i < chars.length; i++) {
|
for (int i = 0; i < chars.length; i++) {
|
||||||
edge[chars[i] - 0] = i;
|
edge[chars[i] - 'a'] = i;
|
||||||
}
|
}
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
int last = -1;
|
int last = -1;
|
||||||
for (int i = 0; i < chars.length; i++) {
|
for (int i = 0; i < chars.length; i++) {
|
||||||
idx = Math.max(idx,edge[chars[i] - 0]);
|
idx = Math.max(idx,edge[chars[i] - 'a']);
|
||||||
if (i == idx) {
|
if (i == idx) {
|
||||||
list.add(i - last);
|
list.add(i - last);
|
||||||
last = i;
|
last = i;
|
||||||
|
Reference in New Issue
Block a user