为什么我的解决方案可以在控制台中工作,但不能在leetcode上工作?
var removeDuplicates = function(nums) {
let res = [];
for(let num of nums) {
if(res.includes(num) === false) {
res.push(num);
}
}
return res.length;
};
控制台: screenshot
邮政编码:
let arr = [1, 1, 2]
removeDuplicates(arr) // 3
答案 0 :(得分:1)
您可以尝试将includes
更改为indexOf
,可能是由于includes
在您的环境中不起作用。另外,您应该返回length
而不是返回res
。
只要您想尝试另一种方法,就可以像下面这样查看Sets
var removeDuplicates = function(nums) {
return [...new Set(nums)]
};
console.log(removeDuplicates([1,1,2]))
console.log(removeDuplicates([1,1,2,3]))
答案 1 :(得分:0)
您没有正确使用分类。从算法上来说,将项目与先前的项目进行比较会更有效,因此复杂度为O(N)
。
也许JS具有诸如Python groupby
之类的高阶函数可以使代码更短,但是从算法的角度来看,所描述的方法绝对是最好的方法。
var removeDuplicates = function(nums) {
let res = [];
let last = NaN
for(i=0; i<nums.length; i++) {
if(nums[i] != last) {
res.push(nums[i]);
last = nums[i];
}
}
return res.length;
};
let arr = [1, 1, 2]
print(removeDuplicates(arr))
>>2
答案 2 :(得分:0)
这是您可以尝试的另一种解决方案...
void Awake()
{
Load();
}
void OnApplicationQuit()
{
Save();
}
void OnApplicationFocus(bool hasFocus)
{
if (hasFocus) Load();
else Save();
}
void Load()
{
long nowTicks = DateTime.UtcNow.Ticks;
long prevTicks = nowTicks;
string prevTicksString = PlayerPrefs.GetString("ticks", string.Empty);
if (!string.IsNullOrEmpty(prevTicksString)) prevTicks = long.Parse(prevTicksString);
double secondsPassed = TimeSpan.FromTicks(nowTicks - prevTicks).TotalSeconds;
Debug.Log(secondsPassed);
}
void Save()
{
PlayerPrefs.SetString("ticks", DateTime.UtcNow.Ticks.ToString());
PlayerPrefs.Save();
}