又是一道奇葩题,注意题目要求返回长度,并且修改原数组!
看下输出,又是找相同元素的题目,回忆一下怎么找相同元素呢,就是用双指针,上一篇已经写过了,这里就不进行赘述了
var compress = function (chars) {
var start = 0;
var end = 0;
var list = [];
while (end < chars.length) {
//找相邻相同元素的精髓
while (chars[start] === chars[end]) {
end++;
}
list.push('' + chars[start]);
//这是为了,当相邻相同元素为1时,不需要把数字push进去
if (end - start > 1) {
//当相邻相同元素大于1时,把数字push进去,
//需要注意‘12’要转为‘1’,‘2’放进去,这里就是为了转这个
for (var n of ('' + [end - start]).split('')) {
list.push(n);
}
}
start = end;
}
//为了满足题目的修改原数组
for (var j = 0; j <= list.length - 1; j++) {
chars[j] = list[j];
}
//返回长度
return list.length;
};