📜  TCS CodeVita 面试 2019(1)

📅  最后修改于: 2023-12-03 14:47:52.587000             🧑  作者: Mango

TCS CodeVita 面试 2019

TCS CodeVita是印度最大的技术挑战赛,目的是通过解决现实生活中的难题来提升学生的技术能力。2019年TCS CodeVita面试相信是众多学生都期待的,下面我们来介绍一下面试的流程以及注意事项。

面试流程
  1. 报名:在TCS官网上注册并报名参加TCS CodeVita
  2. 确认面试时间:TCS会在你的电子邮箱中发送面试邀请,确认你的面试时间,建议提前到场。
  3. 面试官介绍:面试官会先自我介绍,然后会问一些个人信息和项目经验相关的问题。
  4. 技术问题:面试官会问一些技术方面的问题,例如数据结构,算法等等。
  5. 编程题:在面试中,你需要完成一个编程题目。面试官会给你一个问题,并要求你在45分钟内解决它。你可以使用任何一种编程语言。
面试注意事项
  1. 准备面试的材料:身份证,学位证书,学生证等;
  2. 准时到达面试现场,并保持良好的态度和礼仪;
  3. 面试过程中要保持冷静和自信,不要紧张。
  4. 在面试之前,了解一些编程题目和相关的算法和数据结构,以便更加轻松地完成任务。
  5. 面试官会根据你的答案和程序的效率进行评分,所以要尽可能地优化程序的性能。同时,注意代码的书写规范和注释。
编程题目

这是一道经典的动态规划问题:

题目描述:

给定一个长度为n的序列P,定义P[i] = x 的权值为P中最左边的值为x的连续段的长度。例如序列1 2 3 2 5的权值为(1,1,1,2,1)。现在你需要选出一个区间,使得该区间内每种值都恰好出现一次,请求出最短的区间长度。

例如,序列1 2 1 3 2 5,选择区间[2,4],则区间内各元素分别为2,1,3,包含了P的所有值,且区间长度最小,为3.

题目有点长,接下来贴出C++的代码片段。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

int n,a[100005],mn,mx,pos[100005],fi[100005],nxt[100005],l,r,ans=1e9; 
// fi, nxt数组初始化为-1
bool vis[100005],tag[100005];

int main()
{
    memset(nxt,-1,sizeof(nxt));
    memset(fi,-1,sizeof(fi));
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    scanf("%d",&a[i]),mn=min(mn,a[i]),mx=max(mx,a[i]);
    for (int i=1;i<=n;i++)
     {
       pos[a[i]]=i;
       if (fi[a[i]]==-1) fi[a[i]]=i;
       else nxt[pos[a[i]]]=i;
     } 
    for (int i=1;i<=n;i++)
     {       
       memset(tag,0,sizeof(tag));
       int j,now=1;
       for (j=i;j<=n&&j-i<ans-now+1&&now<mx-mn+1;j++)
         if (!vis[a[j]]) vis[a[j]]=1,tag[a[j]]=1,now++; else break;
       if (now==mx-mn+1) ans=min(ans,j-i),j--;
         else if (j>n) break;
       if (nxt[j]!=-1) i=nxt[j]-1; else break;
       for (j=i+1;j<=n&&j-i<ans-now+1&&own<mx-mn+1;j++)
          if (!tag[a[j]]) vis[a[j]]=1, now++;  //比上面代码稍加修改,删去了第一条if语句
        i=j-1;
     }
    printf("%d\n",ans);
    return 0;
}

以上就是TCS CodeVita面试的介绍,希望对大家有所帮助!