[剑指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)
[剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet]相关推荐
- [剑指offer][JAVA]面试题第[39]题[数组中出现次数超过一半的数字][HashMap][摩尔投票法]
[问题描述][简单] 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.你可以假设数组是非空的,并且给定的数组总是存在多数元素.示例 1:输入: [1, 2, 3, 2, 2, 2, 5, ...
- 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找
题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...
- [剑指offer][JAVA]面试题第[31]题[栈的压入、弹出序列][栈]
[问题描述][中等] 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4 ...
- [剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]
[问题描述][中等] 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3 ...
- [剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]
[问题描述][简单] 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行.例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 ...
- [剑指offer][JAVA]面试题第[32-1]题[从上到下打印二叉树][BFS]
[问题描述][中等] 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回: ...
- [剑指offer][JAVA]面试题第[30]题[包含min函数的栈][双栈辅助栈][单栈]
[问题描述][中等] 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1).示例:MinStack min ...
- [剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]
[问题描述][中等] 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题.示例 1:输入: ...
- [剑指offer][JAVA]面试题第[64]题[求1+2+…+n][逻辑运算符]
[问题描述][中等] 求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C).输入: n = 3 输出: 6 [解 ...
最新文章
- 操作系统就是一个“死循环”?
- c打开指定路径文件_C++ 读取指定路径下所有的文件 (C++ get the list of files in a directory)...
- 修改mysql数据库名方法_安全快速修改Mysql数据库名的5种方法
- Spring整合Mybatis-完成用户登录
- 基础、语法都不是最重要的,学Python最重要的是什么?编程思路!
- 还在买白酒?算法工程师们,量化投资了解一下
- 论文首页下划线怎么对齐_毕业论文标准格式要求是什么样的?
- 学术词汇 | Ablation Test or Ablation Experiment
- 美国最受欢迎的电商网站,竟然是一家中国公司?
- 【AC军团周报(第一周)第一篇】线段树从入门到入土【1】
- matlab图像拼接_FPGA大赛【四】具体模块设计图像缓存
- X-UA-Compatible IE=edge,chrome=1
- centos 7 yum命令安装 Nginx、PHP 7、MySQL 57 、redis
- 计算机二级office题库文档,二级office题库
- python怎么弄成黑色背景图片_python 实现将小图片放到另一个较大的白色或黑色背景图片中...
- 数据链路层——MAC地址欺骗及泛洪
- 宽带和流量是分开的吗_带宽与宽带的区别。
- 【JD的一人戏】之小羊踢足球第一篇
- 在操作系统、芯片领域跌倒的中国程序员,如何崛起?
- 【翻译】Matching Restaurant Menus to Crowdsourced Food Data【KDD 2017】
热门文章
- What means the error-message 'java.lang.OutOfMemoryError: GC overhead limit exceeded' in Java?
- 真人拳皇项目第六次Scrum总结——史经浩
- 在虚拟机中安装和配配置 MOSS2007 全过程
- C# MVC的博客开发(二)登录
- Android 播放raw文件夹下音频文件,本地MP3文件播放,播放云端MP3文件,获取MP3文件播放时长
- AppTheme 属性详解
- Android 集成微信分享2,实现微信分享
- 从mysql 5.7 到 mysql 8.0
- tk-mapper 生成器
- Mdi和修改的基本逻辑