腾讯笔试 4.18 差一点AK 各题的做法和代码

注意我是投后台开发的,所以题目不一定和其他岗位相同

先提前声明:我是条ACM铜狗,这次能差点AK很大程度上也是因为这一点。

先上做法,下一楼再上代码
T1 求最小字典序的链表 AC
暴力穷举每条链表
T2 发公告 AC
维护结构体 node 记录每个人的时间间隔、id、下一次能接收的时间。
然后自定义比较器的优先队列。优先选择下一次能接收的时间小的,其次选择编号小的。
T3 俱乐部扣积分 AC
自定义比较器,扣分越大越靠前,扣分相同时截至时间小的靠前。然后用这个比较器 sort 一遍。
sort 完后挨个尝试安放项目,如果时间点 i 已经安过项目了,那下次就往 i 之前的没被安放的时间点放。
T4 能换位的字符串比较 AC
对两个字符串分别做一种特殊的递归操作,然后比较是否相同即可。
递归操作的伪代码:

void part(char* s, int len)
{
        // 如果长度为奇数,不能再分,直接返回
    if(len&1) return;
    // 如果长度为偶数,递归分离
    char *b = s+len/2;
    part(s, len/2);
    part(b, len/2);
        // 如果后半部分比前半部分字典序更小,那就交换这俩字符串
    if(cmp(s,b,len/2)>0)
        strswap(s,b,len/2);
}

T5 打地鼠 过90%
暴力DP。
没AC的原因是最后五分钟的时候我才发现题目里还有一句:这轮从a到b,下轮就不能从b到a了。

好了,剩下的时间就是祈祷我不会因为双非本科的学历被刷掉简历了。

各题代码:

T1 AC

 struct ListNode {
    int val;    
    struct ListNode *next;
};


class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param S ListNode类 val表示权值,next指向下一个元素
     * @return ListNode类
     */
    int len;
    ListNode* head;
    int cmp(ListNode* pta, ListNode* ptb){
        ListNode* a = pta;
        ListNode* b = ptb;
        int cnt = len;
        while(cnt--){
            if(a->val!=b->val) return a->val-b->val;
            a=a->next;
            b=b->next;
            if(a==nullptr) a=head;
            if(b==nullptr) b=head;
        }
        return 0;
    }

    void getlen(ListNode* a){
        len=0;
        ListNode* x = a;
        while(x!=nullptr){
            x=x->next;
            len++;
        }
    }

    ListNode* solve(ListNode* S) {
        head = S;
        ListNode* ret = S;
        getlen(S);
        ListNode* p = ret->next;
        for(int i=1;i<len;i++, p=p->next){
            if(cmp(ret, p)>0)
                ret=p;
        }
        p = ret;
        while(len--){
            if(p->next == nullptr && len>0){
                p->next=head;
            }
            else 
            if(len==0){
                p->next = nullptr;
            }
            p=p->next;
        }
        //p->next=nullptr;
        return ret;
    }
};

T2 AC

#include <bits/stdc++.h>
using namespace std;

struct node
{
    int t;
    int id;
    int stamp;
    bool operator<(const node& other) const {
        if(other.stamp!=stamp) return other.stamp<stamp;
        else return other.id<id;
    }
};

int main()
{
    ios::sync_with_stdio(0);
    priority_queue<node> q;
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        int t;
        cin>>t;
        q.push(node{t,i,t});
    }
    while(k--){
        node x = q.top();
        q.pop();
        cout<<x.id<<"\n";
        //cout<<x.id<<" "<<x.t<<"\n";
        q.push(node{x.t,x.id,x.stamp+x.t});
    }
    return 0;
}

T3 AC

#include <bits/stdc++.h>
using namespace std;

const int MAXN=1000+5;

struct node{
    int t;
    int val;
}a[MAXN];

bool vis[MAXN];

int cmp(const node& a,const node& b){
    if(a.val!=b.val) return a.val>b.val;
    else return a.t<b.t;
}

bool putit(int id){
    while(id>=1 && vis[id]){
        id--;
    }
    vis[id]=true;
    return id!=0;
}

void solve(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].t;
    for(int i=1;i<=n;i++) cin>>a[i].val;
    for(int i=1;i<=n;i++) vis[i]=false;
    sort(a+1,a+n+1,cmp);
    int ans =0 ;
    for(int i=1;i<=n;i++){
        if(!putit(a[i].t)){
            //cout<<a[i].val;
            //for(int i=1;i<=n;i++)    cout<<vis[i];
            //cout<<"\n";
            ans+=a[i].val;
        }
    }
    cout<<ans<<"\n";
    // for(int i=1;i<=n;i++){
    //     cout<<a[i].t<<" "<<a[i].val<<"\n";
    // }
}

int main(){
    ios::sync_with_stdio(0);
    int T;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

T4 AC

#include <bits/stdc++.h>
using namespace std;

const int MAXN=1e5+5;
char sa[MAXN],sb[MAXN];

int cmp(char* a, char* b, int len){
    for(int i=0;i<len;i++){
        if(a[i]<b[i]) return -1;
        else if(a[i]>b[i]) return 1;
    }
    return 0;
}

void strswap(char* a, char* b, int len){
    for(int i=0;i<len;i++){
        swap(a[i],b[i]);
    }
}

void part(char* s, int len){
    // odd
    if(len&1) return;
    // even
    char *b = s+len/2;
    part(s, len/2);
    part(b, len/2);
    if(cmp(s,b,len/2)>0)
        strswap(s,b,len/2);
}

bool solve(){
    cin>>sa>>sb;
    int len = strlen(sa);
    if(cmp(sa,sb,len)==0){
        return true;
    }
    if(len&1){
        return false;
    }
    part(sa, len);
    part(sb, len);
    //cout<<"af a :"<<sa<<"\n";
    //cout<<"af b :"<<sb<<"\n";
    return cmp(sa,sb,len)==0;
}

int main(){
    ios::sync_with_stdio(0);
    int T;
    cin>>T;
    while(T--){
        cout<<(solve()?"YES\n":"NO\n");
    }
    return 0;
}

T5 过90%

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 15;
int d[MAXN][MAXN];
int f[MAXN][MAXN];
int g[MAXN][MAXN];

int main(){
    int n,m,T;
    cin>>n>>m>>T;
    memset(d,0x3f3f3f3f,sizeof(d));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>d[i][j];
        }
    }
    for(int i=0;i<=MAXN;i++){
        for(int j=0;j<=MAXN;j++){
            f[i][j]=g[i][j]=-0x3f3f3f3f;
        }
    }
    int t=1;
    f[1][1]=0;
    for(;t<=T;t++){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                g[i][j]=max(max(f[i-1][j],f[i][j-1]),max(f[i+1][j],f[i][j+1]));
                if(t%d[i][j]==0){
                    g[i][j]++;
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                f[i][j]=g[i][j];
            }
        }
    }


    if(f[n][m]>0)    cout<<f[n][m];
    else cout<<0;

    return 0;
}

#腾讯##数据开发工程师##笔经#
全部评论
巨佬
2 回复 分享
发布于 2021-04-19 09:55
第一题原来可以这样 涨见识了
1 回复 分享
发布于 2021-04-19 10:00
大佬第五题,你现在做出来了吗?卑微小白/(ㄒoㄒ)/~~
点赞 回复 分享
发布于 2021-04-19 14:05
第四题有点没看懂,大佬解释一下
点赞 回复 分享
发布于 2021-04-19 11:42
c++ t2 t3数组暴力 for循环可过 vector过不了就离谱
点赞 回复 分享
发布于 2021-04-19 09:56

相关推荐

2025-12-01 16:35
内蒙古工业大学 Java
上个月实习了7天被开,哎想起来真窝囊,领导叫我去会议室,问我技术栈,当时紧张的,问我有没有做项目啥的,我说没有,有练习,其实我也是做过两个项目的但是,当时紧张的说不出来,就说会java,springboot,我没好好看系统,就说系统是增删改查,他让我回去再看,说熟悉完再看走开发路线还是实施什么的路线,3天后问我,我说这是一个审批系统,其实也不是,是一个检测系统,主要流程是委托&nbsp;&nbsp;受理然后&nbsp;样品管理&nbsp;报告管理&nbsp;审核啥的&nbsp;。然后问我你觉得系统的好处是啥,忘了当时咋说的了,让我回去再熟悉一下。第二周也没安排任务,没有配电脑,然后周二,我当时企业微信没看,和朋友聊天呢,然后他发了任务一个小时之后我才看到,然后我回复的时候是3点半,未读过了一会儿hr给我叫到小黑屋,说觉得不合适,然后让我填离职表。后来想想一开始要是自信点是不是就能配电脑然后开发了。租的房子转租也没租出去,该交房租了,好在当时是月付,没有选择季付,不然哭都没地方。又回到基地了,好久没学了,有时候我也在想为啥我这么消极,这么不自信,哎,面试什么的也挂了好多了。昨天我妈和我打电话说他年前体检就检查出来脸上骨头里面有囊肿,手术很复杂,说要经过鼻子,医生说手术之后容易感染,他老是头疼,我现在在实训基地,离家好远,我爸也有事,我妈说要不拖到我姐放假回去得1月。不知不觉这么多字了,现在是12.1下午4.20,刚面试完胜软,感觉躺平已经成了口头禅了,想离家远一点,但是每个月还是会问家里要生活费,教室和宿舍还是那样,但是不知为何,我总有一种物是人非的感觉,上厕所和接水要去四楼,我们之前的教室就在四楼,路过教室的时候总有一种恍惚的感觉。网上说高敏感是种天赋,我却感觉老是很痛苦,总是能听出一些弦外之音,可能人家也不是那个意思。我也不知道要表达啥了在都是大佬都群里面,默默的看着他们的发言,遇到问题找大佬解决,但是没有利益交换,大佬也会觉得厌烦的。焦虑什么的是能力跟不上欲望,每天一边郁郁寡欢一遍暴饮暴食,总是希望别人能关心一下自己,但自己也不常关心别人。之前一个大佬给我内推,但是我力扣也没刷都不好意思面试,发了两次面试通知我也没面。就到这里吧,毕业设计题目出来了,先学一下黑马的springboot3vue3全栈吧。
_mos_:别的不多说 就你上班聊天摸鱼整整一个小时不看信息我都觉得很抽象了别扯什么自己这那的 我感觉领导确实已经给你很多时间和空间了 自己还是想想有没有真的用心去做 不是什么东西都要别人推着你去干的 总得学会主动一点吧 最后中肯地说一句 卷不了还是别走互联网这条路了 不好意思说话有些直白但希望你可以明白我的意思
点赞 评论 收藏
分享
评论
22
41
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务