每日一题
算法是程序的灵魂——佚名
function remove(arr) { var newArr = []; newArr = [...arr]; for (var i = 0; i < newArr.length - 1; i++) { if (newArr[i] == newArr[i + 1]) { newArr.remove(i); i--; } } return newArr; } var arr = [1, 1, 2, 2, 2, 3, 3, 3, 3, 4]; var result = remove(arr);
答案: B
该题目来源于工作中实际遇到的场景,比如根据用户状态变更记录,计算用户在线时长。
分析数组中数字的规律,题目的本质是删除数组中连续的重复项。
这里给出两种实现方案(C#版本),Java,python的后续补充上):
public static List<int> allStates = new List<int> { 1, 1, 2, 2, 2, 3, 3,3,3,4 };
实现方案1(正向遍历):
public static List<UserUseState> Remove2(List<UserUseState> list)
{
List<UserUseState> newArr = list;
for (var i = 0; i < newArr.Count - 1; i++)
{
if (i == 0)
continue;
var currentItem = newArr[i];
var nextItem = newArr[i + 1];
if (currentItem.State == nextItem.State)
{
newArr.Remove(nextItem);
i--;
}
}
return newArr;
}
实现方案2(反向遍历):
public static List<int> Remove3(List<int> list)
{
for (var i = 0; i < list.Count - 1; i++)
{
var currentItem = list[i];
var nextItem = list[i + 1];
if (currentItem == nextItem)
{
list.Remove(currentItem);
i--;
}
}
return list;
}