题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)
题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)
题目: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。要求空间复杂度为O(1)。
虽然上述的题目是一道leetcode的简单题–(剑指 Offer 03. 数组中重复的数字),但是在leetcode当中的题目并没有要求空间复杂度为O(1),因此,这道题稍微要比 leetcode 难一点,而且,在面试各种大厂的时候,如果遇到这种看似简单的题,它是一定会给加上额外的条件的,而且这里又是说到数组,那么想都不用想,就是面试官肯定让你原地进行查找或者排序啥的,这都是套路了。。。。。
代码实现:
import java.util.ArrayList;
import java.util.List;/*
* 查找数组中的重复数字,要求是空间复杂度O(1)
* ① 查找数组的重复的数字,遇到一个重复数字就返回;
* ② 查找数组中的重复数字,将所有的重复数字打印出来。
* */
public class FindRepeatNumber {public static void main(String[] args) {int[] nums = new int[]{2,4,1,6,3,7,3,5,7,2};int t = findRepeatNumber(nums);System.out.println(t);System.out.println("-------");int[] nums1 = new int[]{4,5,2,3,4,5,3};List<Integer> res = findRepeatNumber1(nums1);for(int i = 0; i < res.size(); i++){System.out.println(res.get(i));}}//在数组中如果遇到了一个重复数字就直接返回。public static int findRepeatNumber(int[] nums) {int temp;for (int i = 0; i < nums.length; i++) {while (nums[i] != i) {if (nums[i] == nums[nums[i]]) {return nums[i];}temp = nums[i];nums[i] = nums[temp];nums[temp] = temp;}}return -1;}//将数组中全部的重复数字全部输出//虽然我这里借助一个集合,但是我在查找重复数字的时候始终是原地查找的,即空间复杂度为O(1)public static List<Integer> findRepeatNumber1(int[] nums) {int temp;List<Integer> res = new ArrayList<>();int[] arr;int j = 0;for (int i = 0; i < nums.length; i++) {while (nums[i] != i) {if (nums[i] == nums[nums[i]]) {res.add(nums[i]);break;}temp = nums[i];nums[i] = nums[temp];nums[temp] = temp;}}return res;}
}
输出的结果:
3
-------
4
5
3
题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)相关推荐
- lintcode :Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II
题目: 删除排序数组中的重复数字 II 跟进"删除重复数字": 如果可以允许出现两次重复将如何处理? 样例 给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A ...
- [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet]
[问题描述][数组中的重复数字][简单] 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道 ...
- C/C++面试之算法系列--去除数组中的重复数字
去除数组中的重复数字 Sailor_forever sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/ ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- np.unique( )--去除数组中的重复数字,并进行排序之后输出
该函数是去除数组中的重复数字,并进行排序之后输出. 要求是 arr 里面是相同的维数. import numpy as npresult1 = np.unique([1, 1, 2, 2, 2, 3, ...
- 剑指offer系列-03.数组中的重复数字
剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- 删除排序数组中的重复数字 II · Remove Duplicates from Sorted Array II
重复一次 [抄题]: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. [思维问题]: [ ...
- Java实例-查找数组中的重复元素
代码实现 public class MainClass {public static void main(String[] args) {int[] my_array = {1, 2, 5, 5, 6 ...
- 删除排序数组中的重复数字 II
题目连接 http://www.lintcode.com/zh-cn/problem/remove-duplicates-from-sorted-array-ii/ 题目大意 跟进"删除重复 ...
最新文章
- 设计模式(2)工厂方法模式(Factory Method)
- 最新!TUI世界大学排名(2021)发布:清华位居全球前20名!
- Android之EventBus框架源码解析上(单例模式)
- 增加SYSTE表空间数据文件
- docker 镜像加速
- IE edge是怎么了??
- Jenkins构建 netcore5.0 项目时出现NU3028/NU3037错误的解决方案
- mysql中条件查询加排序和索引的关系
- UWP 保存用户设置
- 调试裕泰微yt8521s的phy芯片流程记录
- 全国计算机b类一级考试试题题库,全国计算机等级考试模拟题:一级B试题(一)...
- 汽车零部件智能工厂MES生产进度管理系统
- 【高数】如何由解倒求微分方程?及微分方程的阶数、任意常数、特征根的关系
- Win 10 Edge不能上网,微软商店打不开的问题
- 芯动力——硬件加速设计方法——学习笔记(1)
- django实现qq一键登录(qq互联)
- 服务器、存储和网络设备介绍
- tplink android管理软件,tplink手机app下载
- 如何确定包名和Activity值?
- docker mysql volum_Docker Volume
热门文章
- 【Netty】传输(Transport)
- mysql参数文件选项组_my.cnf文件关于组选项的总结
- 三分钟教会你搭建动态网络
- PHP验证码和Ajax验证
- weblogic创建域后启动不了_WebLogic的Azure虚拟机主要版本发布
- nbu oracle 冷备_NBU备份系统应用操作手册..doc
- 接口入参形式_某小公司RESTful、共用接口、前后端分离、接口约定的实践
- PTA 基础编程题目集 6-6 求单链表结点的阶乘和
- 【c语言】蓝桥杯算法提高 简单加法
- html修改headicon,index.html