shopee面经算法题

给定一个长度为的数组,数组中每一个元素的值都在[1,N]之间,找到1~N中没有出现的数字

居然有力扣原题

其实这个题目是力扣的进阶版要求,本文采用两种 时 间 复 杂 度 O ( n ) , 空 间 O ( 1 ) 的 时间复杂度O(n),空间O(1)的 O(n),O(1)方法

利用原数组空间i放到a[i]

  1. 外循环遍历一遍数组,将i放到a[i]
  2. 内循环直到遇到a[a[i]] == a[i]为止
  3. 最后遍历一遍数组i不等于a[i]的放入ans

时间复杂度: O ( n ) 空 间 复 杂 度 O ( 1 ) O(n)空间复杂度O(1) O(n)O(1)
代码:

class Solution {
public:
    inline void swap(int &a, int &b){
        int temp = a;
        a = b;
        b = temp;
    }
    vector<int> findDisappearedNumbers(vector<int>& a) {
        vector<int> ans;
        for(int i = 0; i < a.size(); i++){
            while(a[i] != a[a[i]-1]){
                swap(a[i], a[a[i]-1]);
            }
        }
        for(int i = 0; i < a.size(); i++)
            if(a[i] != i+1)
                ans.push_back(i+1);
        return ans;
    }
};

注意下标要用a[i]-1

用负数打标记

  1. 遍历一遍数组,将a[abs(a[i])]打成负数,标记a[i]已经出现过
  2. 再遍历一遍数组,数组里还是正的元素a[i]说明i没有出现过,放入ans
    跑一遍发现比上面交换的方法来得快些
    image.png

代码:

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& a) {
        vector<int> ans;
        for(int i = 0; i < a.size(); i++){
            if(a[abs(a[i])-1] > 0){
                a[abs(a[i])-1] *= -1;
            }
        }
        for(int i = 0; i < a.size(); i++){
            if(a[i] > 0)
                ans.push_back(i+1);
        }
        return ans;
    }
};

这种方法注意因为每次是取的a[i]作为下标:

  1. a[i]可能被之前的操作变为负数了,取其为下标的时候需要取绝对值abs(a[i])
  2. 而且a[i]的范围是[1,n]需要-1
  3. 故下标用:abs(a[i])-1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IC RMFE,全称是Integrated Circuit Reliability and Failure Analysis Engineer,即集成电路可靠性与故障分析工程师。这个职位主要的工作职责是根据业务需求,参与新产品可靠性评估、故障分析、缺陷定位和方案改进等方面的工作。对于该职位,以下是一些必要的技能和经验: 首先,需要对半导体物理,工艺和设备有一定的了解,熟悉模拟/数字电路,集成电路,芯片设计和制造流程等方面的知识。 其次,需要了解常见的可靠性测试和故障分析技术,如可靠性加速生命周期测试、FTIR分析、器件失效分析等。 还需要熟悉多种软件工具,如SPC统计分析、SEM/EDX分析、电子探针测试等,既要会使用专业软件,也需熟知常用软件的使用方法。 另外,沟通和协调能力也是该职位所重视的。这个岗位需要与设备工程师,产品工程师,制造工程师和质量工程师紧密合作,需要有优秀的沟通和协调能力,以便更快更准确的完成各项任务。 最后,该职位要求具备谨慎、细致、有耐心、具备高度责任感的特点,而这在日常工作中一定是非常重要的。 总之,IC RMFE 是集成电路行业中一个重要的职位,需要掌握多种技能和知识,具备一个懂得分析和处理各种困难问的能力,这样才能胜任这个工作。 ### 回答2: ic rmfe是一种电子学领域中常见的术语。其中,IC指集成电路(Integrated Circuit),也就是将多个电子元件集成在一起的电路芯片;RMFE则代表着Resistor(电阻器)、Capacitor(电容器)、Inductor(电感器)、Transformer(变压器)等元件。IC RMFE面经专业,则是指在职场面试中出现的与这些电子元件和集成电路有关的考。 在这类专业目中,可能会出现一些基础电路设计,例如根据一组电路要求设计相应的电路图或计算出该电路的电阻、电容等参数。此外,面试官也可能会对面试者在IC设计和制造方面的知识有所要求,包括了解CMOS工艺、VLSI设计等方面的知识。 在回答这类专业目时,应该注意对电路和元件的原理有深刻的理解,并能够熟练运用相关的计算方法,特别是在IC设计和制造方面要具备相关的专业知识。同时,还应注重实践能力,能够将所学知识应用到实际问的解决中。 总之,IC RMFE面经专业是电子工程领域职场面试中的重要考察点,面试者应具备深度和广度的相关知识,以及解决实际问所需的实践能力。 ### 回答3: ic rmfe是一个面经中常出现的专业,它代表着Integrated Circuit Design、Radio-Frequency、Microwave、and Fiber-Optic Engineering,即集成电路设计、射频、微波和光纤工程。 对于从事电子工程、计算机科学等相关领域的人来说,熟悉ic rmfe这个专业目的意义非常重要。因为这些领域中,尤其是集成电路设计和通信领域中,这些技能和知识点是必不可少的。 集成电路设计旨在针对芯片级别的系统、器件以及系统上的半导体器件进行设计和开发。而射频、微波和光纤工程则专注于开发和设计在无线电、通信和数字媒体领域中使用的无线电设备。这些专业技能的综合能力将使工程师们能够解决并开发先进的硬件和软件系统,从而推动万物互联时代的发展。 在实际应用中,ic rmfe专业技能已经被广泛用于处于不断更新升级、不断变革的通信、计算机等产业中。在当前这个互联网大数据时代,技术更新和改进是不断的,因此了解并掌握ic rmfe专业技能可以大幅度提升工程师的职业竞争力和专业能力,也让他们有能力带领公司走在时代的前沿。 总之,了解 ic rmfe这个专业目的意义不仅在于我们在平时的日常学习中,更重要的是指引我们在未来发展的道路上,为我们的职业规划和发展打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值