全球国际物流 · 一站直达

加拿大|中国|美国|英国|澳洲 专线运输

立即下单

我们的优势

全球专线

覆盖中国、加拿大、美国、英国、澳大利亚等多个国家。

只算实重

拒绝体积重,无任何隐藏收费。

包清关 包关税

专业团队全程处理,运输更加省心。

物流实时查询

订单状态实时更新,手机电脑同步查看。

50+

全球仓库

120+

运输国家

500000+

累计包裹

99.8%

客户满意度

联系我们

客服微信:DWGLOBAL

客服邮箱:service@dwglobal.com


联系客服
蒙特利尔精英网-新加园»论坛 教育培训 蒙特利尔法语B2面试一对一教育微信fundes 面试官:如何迅速找出数组中重复的数字? ...
12下一页
返回列表 发新帖
查看: 447|回复: 14

面试官:如何迅速找出数组中重复的数字?

[复制链接]

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
发表于 2021-5-10 19:52:51 | 显示全部楼层 |阅读模式
提示您:未获得智伍应用正式版的授权,部分功能受到影响!



尊敬的用户,您好!!


非常感谢您能安装智伍应用旗下的产品,为了产品的可持续发展和升级,云采集已经开始按天收费,建议购买200天,免费赠送400天,一共600天,平均每天仅需1.67元。


向用户收费是为了给用户更可靠的保障和服务,所收取的费用主要用于产品的正常运作、不断研发和改进,希望各位用户能够理解和支持。



购买正式版授权请打开下面的网址自助购买:
www.zhiwu55.com/authorization/buy_end_time.php?hzw_appid=9A8E4148CA303E563C85CDA0B7C6508D



购买之后,自动开通正式版授权,新采集的内容不会再出现未购买授权的提示信息,同时智伍应用旗下所有含云采集功能的产品,都无需再次购买云采集的正式版授权,即云采集的授权可以在智伍应用的各个产品那里通用!


如果您已经购买了正式版,还是会出现未购买授权的提示,或者有其它问题,请联系智伍应用官方在线客服QQ/微信:2085244671




推荐阅读:

  • 消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗?
  • 三次阿里二面挂,Java+并发+JVM+网络+数据库+算法,我还能说啥?
  • 性能优化专题复习:JVM+Tomcat+MySQL+面试+学习笔记等


题目

给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。
数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
请找出数组中任意一个重复的数字。
注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1。
样例
给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。

返回 2 或 3。解题思路

从题目我们可以知道,数组长度为 n,所有数字都在 0~n-1 范围内。如果元素不重复,那么数组应该就是 [0, 1, 2, ...n-1](假设给数组排完了序)。也就是说,递增排序后,【*****智伍应用提示您:未购买正式版授权,功能受到影响!!请根据最上面的引导提示,自助购买正式版授权,自动开通!!在线客服微信:ccccyyyy4444,官方网站:zhiwu55.com*****】,即下标为 0 的元素值也是 0,以此类推。
首先,我们可以遍历数组,若存在元素不在 0~n-1 的范围内,直接返回 -1。
接着,再次遍历数组,若下标 i 与对应元素 nums 不同,即 nums != i,我们应该把 nums 这个元素交换到正确的位置 nums上。交换前,先判断 nums 与 nums[nums] 这两个元素是否相同,相同说明存在重复元素,直接返回,否则进行 swap 交换。交换过后,我们需要再次判断 i 位置上的元素,因此,我们使用 while 循环。
可对照下方代码实现,加深理解。
100% AC 代码
class Solution {
public int duplicateInArray(int[] nums) {
int n = nums.length;

// 若存在数组元素不在[0, n-1] 的范围内,直接返回-1
for (int num : nums) {
if (num < 0 || num >= n) {
return -1;
}
}

for (int i = 0; i < n; ++i) {
while (nums != i) {
if (nums == nums[nums]) {
// 说明位置i与位置nums上的元素相同,直接返回该重复元素
return nums;
}
swap(nums, i, nums);
}
}
return -1;

}

private void swap(int[] nums, int i, int j) {
int t = nums;
nums = nums[j];
nums[j] = t;
}
} _.._ ,------------.
,' `. ( We want you! )
/ __) __` \ `-,----------'
( (`-`(-') ) _.-'
/) \ = / (
/' |--' . \
( ,---| `-.)__`
)( `-.,--' _`-.
'/,' ( Uu",
(_ , `/,-' )
`.__, : `-'/ /`--'
| `--' |
` `-._ /
\ (
/\ . \. offer
/ |` \ ,-\
/ \| .) / \
( ,'|\ ,' :
| \,`.`--"/ }
`,' \ |,' /
/ "-._ `-/ |
"-. "-.,'| ;
/ _/["---'""]
: / |"- '
' | /
` |

作者:yanglbme
原文链接:https://juejin.im/post/5dd29e1f5188254a1f446545

回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 19:57:08 | 显示全部楼层
转发了
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:01:25 | 显示全部楼层
转发了
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:05:42 | 显示全部楼层
刚问了老婆,说用hashmap,遍历一遍,存入到map,每个元素作为key,而value为先从key取出并+1的结果。再遍历一次,取出key的value,大于等于2的就是重复的[捂脸]
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:09:59 | 显示全部楼层
这出题错了,面试官应该是想考异或的用法,所以要加上条件:找出只有一个重复的数
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:14:16 | 显示全部楼层
都排序好了,判断相邻两个元素num,num[i+1]是否相等不就得了。这样效率如何?
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:18:33 | 显示全部楼层
数组求和然后减去0到n-1的和,差就是重复的数
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:22:50 | 显示全部楼层
两种方法,第一种时间复杂度为O(1),空间复杂度为O(N),使用哈希表可以解决。第二种时间复杂度为O(N),空间复杂度为O(1),从0到N中间如果有重复,也必然存在一个环,通过双指针法找到环的入口即可,如果没有则不存在
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:27:07 | 显示全部楼层
转List用java8的lambda表达式
回复

使用道具 举报

18万

主题

38万

帖子

105万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1052519
 楼主| 发表于 2021-5-10 20:31:24 | 显示全部楼层
直接group by搞定
回复

使用道具 举报

下一页 »
12下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|蒙特利尔精英网-新加园

GMT+8, 2026-9-25 00:17 , Processed in 0.132248 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表