360 3-6笔试 笔经

40 选择 + 2算法题 1h
选择题挺八股的,c++,java,数据库,数据机构啥题都有,小半年没看八股了,有一半不确定
算法题比较简单,就俩模拟题

第一个 求字符串是否符合要求
第二个给定n<=1e19,q<=100,代表1-n都是黑色的,每次次操作将l到r内颜色换一下,求1-n 内 颜色为黑色的个数 n <= 1e18, 奈何q太小才100,直接暴力模拟即可。记录一下所有黑色的l到r,按左端点排序,然后把重合的线段合并一下。 我就直接四种情况判断了(就判断线段相交啥的位置情况,然后生成新的区间),整体复杂度q^2log(q),写的有点傻不过能过就行 ,好久没写笔试了不太行了,写的老慢了hhh

*对了说一下正事,字节内推了,坐标字节幸福了客户端,躺平组,平均早11晚9,双周三活动日以及每周五7点下班,平均1-2月一次团建,一人一月团建费150,干饭,ktv,卡丁车等等,周边还有带泳池的免费健身房,简历私我即可帮你投,无历史原因大概率可以约面,组里大约还有8+hc,实习转正率高达90%,还能给你修改简历提供面经共享消息,马上回去做毕设了,想给组里招点人,来了大家就是兄弟哇。
q 2271277728
v 178****3236
企业邮箱 lihengli@bytedance.com
实习大四春招均可。
简历给我我给你投!
简历给我我给你投!
简历给我我给你投!
要投其他组的不要。 考虑幸福里后端算法岗前端产品测试开发的也可以给你投,想投其他部门的不要找俺啦
*

第一个 求字符串是否符合要求

#include
using namespace std;
int judge(string s){
    if(s.size() > 10) return 0;
    for (int i =0; s[i]; i++){
        if(  (s[i] >= 'a' && s[i] = 'A' && s[i] <= 'Z')) ;
        else return 0;
    }

    return 1;
}
int main() {
    int n, m;
    cin >> n;
    string s;
    int num = 0;
    for (int i = 1; i <= n; i++) {
        cin >> s;
        num += judge(s);
    }
    cout << num << endl;
    return 0;
}

*第二个q次操作每次讲l到r内颜色换一下,求1-n 内 颜色为黑色的个数 n <= 1e18, 奈何q太小才100,直接暴力模拟即可。记录一下所有黑色的l到r,按左端点排序,然后把重合的线段合并一下。 我就直接四种情况判断了,整体复杂度q^2log(q) *

#include
using namespace std;
const int maxx = 1e3+7;
long long n, m;
int cnt = 0;
struct stu{
    long long l, r, id;
}A[maxx];
int cmp (stu a, stu b){
    if( a.l == b.l) {
        return a.r < b.r;
    }
    return a.l < b.l;
}
long long solve(){
    long long num = cnt;
    long long l, r;
    l = A[cnt].l;
    r= A[cnt].r;
    for(int i = 1; i < num; i++){
        if(A[i].l > A[i].r)
            continue;
        if( A[i].l > r || A[i].r < l) ;
        else if(A[i].l = r){
            A[cnt].l = A[i].l;
            A[cnt].r = l - 1;
            A[i].l = r + 1;
            break;
        }
        else if(A[i].l >= l && A[i].r <= r){
            A[cnt].l = A[i].r + 1;
            A[i].r = A[i].l - 1;
            A[i].l = l;
        }
        else if(A[i].l >= l){
            A[cnt].r = A[i].l - 1;
            A[i].l = r + 1;
            break;
        }
        else if(l >= A[i].l){
            A[cnt].l = A[i].r + 1;
            A[i].r = l -1;
        }
        l = A[cnt].l;
        r = A[cnt].r;
    }
    sort(A + 1, A + 1 + cnt, cmp);
    long long ans = n;
    for(int i = 1; i <= cnt; i++){
        if(A[i].l <= A[i].r){
            ans -= (A[i].r - A[i].l + 1);
        }
    }
    return ans;
}
int main(){
    cin >> n >> m;

    for (int i = 1; i <= m; i++){
        ++cnt;
        cin >> A[cnt].l >> A[cnt].r;
        cout<< solve() <<endl;

    }
    return 0;
}
#实习经验分享##校招##实习##内推##360公司#
全部评论
楼主楼主,有后端开发岗吗,地址哪的?
点赞 回复 分享
发布于 2022-03-06 18:10
春招简历筛挂了,还可以投么
点赞 回复 分享
发布于 2022-03-06 20:25
我复制你第二题的答案,好像不对。 我用的测试案例是 100 3 10 20 12 30
点赞 回复 分享
发布于 2022-03-06 21:34
那破网站有点离谱,复制代码还能错的,这个是对的hhh 上面24行改成这个   else if(A[i].l >= l && A[i].r <= r)
点赞 回复 分享
发布于 2022-03-07 02:14

相关推荐

想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
2 5 评论
分享
牛客网
牛客企业服务