29 lines
977 B
Markdown
29 lines
977 B
Markdown
Leetcode #443 | #Medium | [[Указатель на запись]]
|
|
## Идея
|
|
Цикл по массиву + цикл по повторам, заводим указатель word и изменяем in-place, сжатие гарантирует что мы не выйдем за пределы массива
|
|
## [[Big-O]]
|
|
- Время ```O(N)```
|
|
- Память ```O(1)```
|
|
## Код
|
|
```Java
|
|
class Solution {
|
|
public int compress(char[] chars) {
|
|
int write = 0;
|
|
for (int i = 0; i < chars.length; i++) {
|
|
int count = 1;
|
|
char currentChar = chars[i];
|
|
while (i + 1 < chars.length && chars[i + 1] == chars[i]) {
|
|
i++;
|
|
count++;
|
|
}
|
|
chars[write++] = currentChar;
|
|
if (count > 1) {
|
|
for (char c : String.valueOf(count).toCharArray()) {
|
|
chars[write++] = c;
|
|
}
|
|
}
|
|
}
|
|
return write;
|
|
}
|
|
}
|
|
``` |