[剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet]

【问题描述】[数组中的重复数字][简单]

找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3 

【解答思路】

1. 排序后比较

时间复杂度:O(NlogN) 空间复杂度:O(1)

class Solution {public int findRepeatNumber(int[] nums) {Arrays.sort(nums);for(int i=0;i<nums.length-1;i++){if(nums[i]==nums[i+1]){return nums[i];}}return -1;}
}
2. HashSet

时间复杂度:O(N) 空间复杂度:O(N)

public int findDuplicate(int[] nums) {HashSet<Integer> set = new HashSet<>();for (int i = 0; i <= nums.length - 1; i++) {if (set.contains(nums[i])) {return nums[i];}else{set.add(nums[i]);}}return -1;
}
3.原地置换

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public int findRepeatNumber(int[] nums) {int i = 0;while(i < nums.length) {if(nums[i] == i) {i++;continue;}if(nums[nums[i]] == nums[i]) return nums[i];int tmp = nums[i];nums[i] = nums[tmp];nums[tmp] = tmp;
//nums[nums[i]], nums[i] = nums[i], nums[nums[i]],为什么这里的交换可以让元素的 索引 与 值 相等。//下面供大家方便看出来(因为我看了好久才反应过来)://记num[ i ] =a,num[num[ i ] ]=num[ a ]=b,那么 交换后,num[ i ]=b, num[num[i]]=num[a]=a,这时候下标 a 对应的元素也是a,达到目的}return -1;}
}

【总结】

1.考察的是程序员的沟通能力,先问面试官要时间/空间需求
  • 时间优先就用字典,
  • 有空间要求,就用指针+原地排序数组
  • 要求空间O(1)并且不能修改原数组,还得写成二分法
2.灵活思路 一题多解
3. HashMap 或 HashSet常见用法

3.1 HashSet

新建 HashSet<Integer> set = new HashSet<>();

(1)增加
public boolean add(E e);
(2)删除
public boolean remove(Object j);
(3)对比查找
public boolean contains(Object j);
(4)清空集合
public void clear();
(5)获取长度
public int size();
3.2 HashMap

新建 HashMap<String,Integer> map= new HashMap<String,Integer>();

(1) 插入键值对数据
public V put(K key, V value)
(2)根据键值获取键值对值数据
public V get(Object key)
(3)获取Map中键值对的个数
public int size()
(4)判断Map集合中是否包含键为key的键值对
public boolean containsKey(Object key)
(5)判断Map集合中是否包含值为value的键值对
boolean containsValue(Object value)
(6)判断Map集合中是否没有任何键值对
public boolean isEmpty()
(7)清空Map集合中所有的键值对
public void clear()
(8)根据键值删除Map中键值对
public V remove(Object key)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德国超级计算机中心,德国:强化人工智能能力建设 加大高性能计算网络投资...

图片来源&#xff1a;德国马克斯普朗克智能系统研究所德国2020年更新《国家人工智能战略》&#xff0c;在原先30亿欧元基础上再增加20亿欧元支持德国人工智能研究。德国科学联席会议决定投入1.33亿欧元&#xff0c;继续加强对人工智能能力中心和“高校教育的人工智能”进行资助…

HDU-3664-Permutation Counting

Permutation Counting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1739 Accepted Submission(s): 918 Problem Description Given a permutation a1, a2, … aN of {1, 2, …, N}, we define its E-val…

html:(9):blockquote引用和br换行

<blockquote>标签&#xff0c;长文本引用 <blockquote>的作用也是引用别人的文本。但它是对长文本的引用&#xff0c;如在文章中引入大段某知名作家的文字&#xff0c;这时需要这个标签。 等等&#xff0c;上一节<q>标签不是也是对文本的引用吗&#xff1f;不…

K3CLOUD数据权限授权

1.定义角色&#xff0c;把用户放入角色内 2.设置数据规则 3.设置业务对象功能授权 转载于:https://www.cnblogs.com/RogerLu/p/10370347.html

html:(10):添加空格和hr

为你的网页中添加一些空格 在上一节的例子&#xff0c;我们已经讲解过在html代码中输入空格、回车都是没有作用的。要想输入空格&#xff0c;必须写入 。 语法&#xff1a; 在html代码中输入空格是不起作用的&#xff0c;如下代码。 在浏览中显示&#xff0c;还是没有空格效果…

NYOJ82-迷宫寻宝1

迷宫寻宝&#xff08;一&#xff09; 时间限制&#xff1a; 1000 ms | 内存限制&#xff1a; 65535 KB 难度&#xff1a; 4 描述一个叫ACM的寻宝者找到了一个藏宝图&#xff0c;它根据藏宝图找到了一个迷宫&#xff0c;这是一个很特别的迷宫&#xff0c;迷宫里有N个编过…

[剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组]

【问题描述】[中等] 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。示例:现有矩阵 matrix …

微机计算机原理姚向华课后答案,微型计算机操作系统

1. 详尽剖析Mac OS X内部工作原理的具体细节。 2. 揭示Mac OS X及其组件的核心体系结构和实现。 3. 以一种面向实现的方法介绍Mac OS X系统。 4. 透彻解释Mac OS X的众多用户级和内核级IPC机制的工作原理&#xff0c;并且提供足够的知识和示例&#xff0c;可以满足各个层次的读…

node.js Error: connect EMFILE 或者 getaddrinfo ENOTFOUND

Error: getaddrinfo ENOTFOUND] code: ENOTFOUND, errno: ENOTFOUND, syscall: getaddrinfo Error: connect EMFILE 本人在中心服上向800多个ip上发请求&#xff0c;发两次就不行了出现如上报错。 原因是文件句柄不够用了&#xff0c;修改 ulimit 即可&#xff0c;步骤如下&am…

TokenFlow详解

https://github.com/omerbt/TokenFlow/issues/25 https://github.com/omerbt/TokenFlow/issues/31 https://github.com/omerbt/TokenFlow/issues/32 https://github.com/eps696/SDfu register_extended_attention_pnp1. 为所有BasicTransformerBlock layer的attn1重构forward2.…

html:(11):address和code标签

<address>标签&#xff0c;为网页加入地址信息 一般网页中会有一些网站的联系地址信息需要在网页中展示出来&#xff0c;这些联系地址信息如公司的地址就可以<address>标签。也可以定义一个地址&#xff08;比如电子邮件地址&#xff09;、签名或者文档的作者身份…

Java虚拟机(JVM)面试题大集合

Java虚拟机&#xff08;JVM&#xff09;Java内存区域说一下 JVM 的主要组成部分及其作用&#xff1f;说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别&#xff1f;队列和栈是什么&#xff1f;有什么区别&#xff1f;HotSpot虚拟机对象探秘对象的创建为对象分配内存处理…

从html到pug模板,将变量从html-webpack-plugin传递到pug模板

是否可以将变量传递给我之前在html-webpack-plugin中定义的pug-html-loader加载的.pug模板&#xff1f;webpack.config.babel.js...{test: /\.pug$/,use: [{loader: html-loader},{loader: pug-html-loader,options: {self: true}}]}...plugins: [new HtmlWebpackPlugin({chunk…

crossdomain.xml配置不当的利用和解决办法

00x1: 今天在无聊的日站中发现了一个flash小站&#xff0c;点进crossdomain.xml一看&#xff0c;震惊 本屌看到这个*就发觉事情不对 百度一下&#xff0c;这是一个老洞&#xff0c;配置不当能引起各种问题就算能远程加载恶意的swf文件&#xff0c;(swf是flash专用后缀文件常用于…

html:(12):pre和ul-li

使用<pre>标签为你的网页加入大段代码 在上节中介绍加入一行代码的标签为<code>&#xff0c;但是在大多数情况下是需要加入大段代码的&#xff0c;如下图&#xff1a; 怎么办&#xff1f;不会是每一代码都加入一个<code>标签吧&#xff0c;没有这么复杂&…

Sudoku Extension UVALive - 4763

题目地址 https://icpcarchive.ecs.baylor.edu/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem2764就是让你写一个计算数独的程序 这个程序有几个条件 1 输入o处填奇数2 输入e处天偶数3 输入0处随便填4 输入相同小写字符的地方要写相同的数5 …

[Leedcode][JAVA][第394题][字符串解码][栈][类型转换]

【问题描述】[中等] 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空…

2019昆明计算机会议,计算机 | ACSAC 2019等国际会议信息6条

图形学与多媒体IPTA 2019International Conference on Image Processing Theory, Tools and Applications全文截稿: 2019-06-02开会时间: 2019-11-06会议难度: ★★CCF分类: 无会议地点: Istanbul, Turkey网址&#xff1a;http://www.ipta-conference.com/ipta19/The ninth Int…

html:(13):ol-li和div作用

使用ol&#xff0c;添加图书销售排行榜 如果想在网页中展示有前后顺序的信息列表&#xff0c;怎么办呢&#xff1f;如&#xff0c;当当网上的书籍热卖排行榜&#xff0c;如下图所示。这类信息展示就可以使用<ol>标签来制作有序列表来展示。 语法&#xff1a; <ol>…

粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则

上一篇文章中&#xff0c;我们有提到Activity在屏幕尺寸发生变更时的处理方式&#xff0c;总共有两种&#xff1a; 重启APP以适应屏幕改变&#xff1b;手动处理数据&#xff0c;避免APP重启。同样&#xff0c;这两种方式也同时适用于改变屏幕方向、更改系统语言、甚至输入法等等…