[面经]CVTE的两道笔试编程题

32 篇文章 0 订阅
29 篇文章 10 订阅

晚上状态有点不好,然后就仓促参加笔试了。前面很多道选择题,真是坑,都是多选(混杂了多道单选)。下面就说说笔试题的两道编程题吧。其实我做的时候也是挺紧张的,随意符合题意的做完提交,也没加以优化,其实如果时间允许,我也是蛮想优化下的,不过这 场笔试不是看你优化得有多好,而是看你做对了没。

第一道题:字符数组的循环右移问题

题目要求:将N个字符的数组,循环右移K位。时间复杂度O(N)。
现场思路:
1. k可以小于N,大于N,等于N,按照这几种请况分析。首先我们必须知道,当N=dK(d=0,1,2..)时,字符数组循环右移后,字符数组中字符位置不变。有了这个“突破口”我们就能将K>N转化成K<=N来解,这样缩小了判断的范围。
2. 接下来我们只需要分析K

public static void solution(int[] arr, int length, int shiftStep)
{
    if(arr==null||length==0) return;
    int count=shiftStep%length;
    if(count==0) return;
    int[] copy=new int[length];
    for(int i=0;i<length;i++){
        copy[i]=arr[i];
    }
    for(int i=0;i<length;i++){
        arr[(i+count)%length]=copy[i];
    }
}

第二道题:字符串去重问题

题目要求:删除小写字母字符串中重复字符。如果可以,优先删除重复字符中排在比他小字符前面的字符。 比如,输入:bbcacdww;输出:bacdw
现场思路:一开始,我本来在想这个问题的最优解,排除使用“暴破”。想了一阵子,可能是太紧张了,思路不开。时间快到了,被迫是用“暴破”。然而“暴破”也不是那么容易的,orz。

public static String solution(String s)
{
    if(s==null||"".equals(s)) return s;

    StringBuilder sb = new StringBuilder(s);
    int i = 0;
    while (i < sb.length())
    {
        char temp = sb.charAt(i);
        boolean isR = false; // 是否有重复的字符在i的前面
        boolean isFront = true; // 要删除后面的重复字符?true删除后面的重复字符:false删除前面的重复字符
        int j = i + 1;
        while (j < sb.length())
        {
            if (isFront && sb.charAt(j) < temp)
            {
                isFront = false;
            }
            if (sb.charAt(j) == temp)
            {
                if (isFront)
                {
                    sb.deleteCharAt(j);
                    continue;
                }
                else
                {
                    isR = true;
                }
            }
            j++;
        }
        if (isR)
        {
            sb.deleteCharAt(i);
        }
        else
        {
            i++;
        }
    }
    return sb.toString();
}

总结: 算法题还是要有针对性的刷题,然后从中提取解法和经验。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
CVTE是一家具有领先技术的嵌入式解决方案提供商。在CVTE的嵌入式笔试题中,通常会涉及一些基础的嵌入式知识和技能。 首先,嵌入式系统是指集成了微处理器芯片和专用硬件的系统,这些芯片和硬件用于执行特定的功能。嵌入式系统通常用于控制和监测其他设备或系统。 在CVTE的嵌入式笔试题中,可能会涉及以下问题: 1. 嵌入式系统的特点:需要了解嵌入式系统的特点,例如实时性、稳定性、功耗低、尺寸小等。 2. 嵌入式开发工具和环境:了解嵌入式开发工具和环境,例如编译器、调试器、仿真器等。 3. 嵌入式操作系统:熟悉一些常用的嵌入式操作系统,例如Linux、RTOS(Real-Time Operating System)等。 4. 单片机和微处理器的区别:了解单片机和微处理器的区别,例如单片机通常集成了内存、IO口、定时器等外围设备。 5. 嵌入式软件开发:了解嵌入式软件开发的流程和方法,例如需求分析、软件设计、调试等。 6. 嵌入式硬件设计:了解一些基本的嵌入式硬件设计知识,例如电路设计、PCB设计、信号处理等。 7. 嵌入式通信协议:了解一些常用的嵌入式通信协议,例如UART、SPI、I2C、CAN等。 总之,CVTE的嵌入式笔试题目旨在考察应聘者对嵌入式系统的基本理解和掌握程度。准备笔试时,需要针对上述问题对相关知识进行学习和复习,以便能够准确回答和解决嵌入式开发相关的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值