拼多多算法笔试
算法岗位:
1. 数组低谷长度
2. 重复字符串
3. 最小到达目标步数
4. 靓号
第一道卡在了输入上,很气,一直20%,后来发现是0就过了20%。
第二三道,100%
第四道,直接放弃了。
有没有小伙伴分享下第四题的AC思路。
分享下代码,求个人品能过笔试。
1. 第一道用三个指针记录 left low right,输入问题没过,代码就不放了。
2.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str_s[100] = {0};
char str_p[100] = {0};
int str_s_len = 0, str_p_len = 0;
scanf("%s", str_s);
str_s_len = strlen(str_s);
for (int i = 1; i <= str_s_len; ++i)//len
{
int j = 0;
for (j = i; j < str_s_len; j = j + i)//start
{
int k = 0;
for (k = j; k < ((j + i) > str_s_len ? str_s_len : (j + i)); ++k)
{
if (str_s[k] != str_s[k - i])
{
break;
}
}
if (k < ((j + i) > str_s_len ? str_s_len : (j + i)))
break;
}
if (j >= str_s_len)//find!
{
memcpy(str_p, str_s, i);
str_p_len = i;
break;
}
}
printf("%s\n", str_p);
return 0;
}
3.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
int target = 0;
scanf("%d", &target);
int sum = 0;
int steps = 0;
int loop_cnt = pow(10, 9);
target = (target > 0 ? target : -target);
for (int i = 0; i < loop_cnt; ++i)
{
sum += i;
if (sum > target)
{
int bias = sum - target;
if (bias % 2 == 0)
{
steps = i;
break;
}
}else
if (sum == target)
{
steps = i;
break;
}
}
printf("%d\n", steps);
return 0;
}
#拼多多#
查看14道真题和解析