《剑指offer刷题笔记(4),netty源码分析视频

思路1:

时间复杂度 O ( n ) O(n) O(n)

使用unordered_set

c++代码1:


class Solution {

public:

    int duplicateInArray(vector<int>& nums) {

        unordered_set<int> hash; //set数组,不可以存贮重复元素

        int n =  nums.size();

        if(n==0) return -1;

        for(int i = 0; i < n; i++)

        {

            if(nums[i] < 0||nums[i] > n-1)

               return -1;

        }

        

        for(int i = 0; i < n; i++)

        {

            if(hash.count(nums[i])!=0) //如果

               return nums[i];

            else

               hash.insert(nums[i]);

        }

        return -1;  //没有重复的数字,返回-1

    }

}; 

思路2:

(数组遍历) O ( n ) O(n) O(n)

首先遍历一遍数组,如果存在某个数不在0到n-1的范围内,则返回-1。

下面的算法的主要思想是把每个数放到对应的位置上,即让nums[i] = i

从前往后遍历数组中的所有数,假设当前遍历到的数是 nums[i]=x,那么:

如果x != i && nums[x] == x,则说明 x 出现了多次,直接返回x即可;如果nums[x] != x那我们就把 x交换到正确的位置上,即 swap(nums[x], nums[i]),交换完之后如果nums[i] != i,则重复进行该操作。由于每次交换都会将一个数放在正确的位置上,所以swap操作最多会进行 n 次,不会发生死循环。

循环结束后,如果没有找到任何重复的数,则返回-1

时间复杂度分析

每次swap操作都会将一个数放在正确的位置上,最后一次swap会将两个数同时放到正确位置上,一共只有 n 个数和 n 个位置,所以swap最多会进行 n−1次。所以总时间复杂度是 O ( n ) O(n) O(n)。

c++代码2:

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析),有需要的朋友可以戳这里即可免费领取

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

算法刷题(PDF)

Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)**

[外链图片转存中…(img-6f3ebsB9-1628594488768)]

算法刷题(PDF)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值