今天参加了力扣和字节跳动联合举行的周赛,也是第一次参加周赛,一个半小时,一共四个题,只做出来了两个题,第三个题有了一点思路,奈何没时间了,但收获了200枚扣币,也是很开心了!下面是我本次参赛的前两题。
题一:好数对的数目
这个题目,我的解法是从左往右循环,共两层循环,第一层循环各个元素,第二层从第一层元素的下一个元素相比,判断是否满足nums[i]=nums[j]且i<j这两个条件。这个题是个easy题,用时较少。
代码如下:
var n=0;//好数对的数目
for(var i=0;i<nums.length-1;i++)
{
for(var m=i+1;m<nums.length;m++)
{
if(nums[i]===nums[m])
{
n++;
}
}
}
return n;
该题用时6min,因为怕出错罚时,所以在本地操作了一遍,耽误了一些时间。
题目二:仅含1的子串数
看到这个题,一时傻了眼,根本不知道思路从哪里来,刚开始还想用循环来找,结果发现根本不行(可能是我太菜了),接下来我想它们之间可能存在着某种规律,就开始找规律,运气还可以,找到了规律,任何一个字符串的所有子串数目为
字符串长度(字符串长度+1))除以2+1;1为空串,在此题中不考虑;*
找到这个规律后,我就想如果能够把只含1的字符串分割出来,然后求它的子串,问题不就解决了吗?且每个只含1的字符串都被0给隔开了,所以我就以0为分割点进行了字符串的分割;
代码如下:
var i=0,m=0;
s=s.split("0");//以0为分割点进行字符串分割为数组
while(i<s.length)
{
if(s[i]!==null)//当该数以0开始时分割出来的就包括空串,判断一下
{
m+=(s[i].length*(s[i].length+1))/2;//求子串数
}
i++;
}
return m;
用时40min,难度中等,太菜了!
题目三:概率最大的路径
本题看到了图这个字,我就有点不知所措了,因为总时间只有一个半小时,所以只有一点思路,该思路还只可以实现三个节点的,需要我认真思考思考!
我的思路就是:将start与end节点组成一个数组a,循环遍历数组edges,查找其中内容是否和数组a相同,若相同,就记下这个数组下的概率;若不相同,就与edges中的下个元素用concat连接起来,观察是否能够达到要求,若能达到要求,则将它们的概率相乘记录起来,最后返回记录值中最大的那个数。
我的代码如下:
var a=new Array();
var b=new Array();
a.push(start);
a.push(end);
for(var i=0;i<edges.length;i++)
{
if(edges[i].toString()===a.toString())
{
m=succProb[i];
}
else
{
b=edges[i].concat(edges[i+1])
console.log(b);
if(b[1]==b[2]&&b[0]===start&&b[3]===end)
{
n=succProb[i]*succProb[i+1];
}
}
}
return (Math.max(m,n));
这个思路只能实现3个节点的,大于3的无法找到实现,很大的一个bug!
题目四:服务中心的最佳位置
该题完全没有思路,你有思路吗?欢迎一起讨论。
以上题目均来自力扣:题目地址