宁波网站建设设计佛山网站建设找方维网络
web/
2025/9/27 23:17:15/
文章来源:
宁波网站建设设计,佛山网站建设找方维网络,装饰公司网站模板,天元建设集团有限公司济南第六建筑工程分公司LeetCode 287 寻找重复数 难度#xff1a;中等 题目#xff1a; 给定一个包含 n 1 个整数的数组 nums #xff0c;其数字都在 [1, n] 范围内#xff08;包括 1 和 n#xff09;#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 #xff0c;返回… LeetCode 287 寻找重复数 难度中等 题目 给定一个包含 n 1 个整数的数组 nums 其数字都在 [1, n] 范围内包括 1 和 n可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。 示例 1 输入nums [1,3,4,2,2]
输出2示例 2 输入nums [3,1,3,4,2]
输出3 提示 1 n 105nums.length n 11 nums[i] nnums 中 只有一个整数 出现 两次或多次 其余整数均只出现 一次 我的简单思路
class Solution {public int findDuplicate(int[] nums) {// 简单思路遍历整个数组取tempnums[i],又遍历数组如果nums[j]tempi!j则说明这个temp重复// 时间复杂度On^2,空间复杂度O1for (int i 0;i nums.length;i) {int temp nums[i];for (int j 0;jnums.length;j) {if (nums[j] temp i ! j ) {return temp;}}}// 无作用仅为保持语法return 0;}
}
很明显这样的时间复杂度会导致案例执行超出时间限制。 测试用例55是一个很大的数组如何优化呢
反思总结一开始的思路简单但是考虑O(1)的空间复杂度理解的是只能用一个临时int变量导致后续没有用hash表去解决这道题。
从Leetcode力扣 1-300题视频讲解合集手画图解版代码【持续更新ing】学习到这道题的两个解决方法:
哈希表 用哈希表统计整数出现的次数如果发现哈希表中的key已经存在了说明这个key就是重复的整数。 class Solution {public int findDuplicate(int[] nums) {// 哈希表法if (nums null || nums.length 0) {return 0;}MapInteger,Integer count new HashMap(nums.length);for (int num: nums) {if (count.containsKey(num)) {return num;}else {count.put(num,1);}}return 0;}
}
快慢指针 class Solution {public int findDuplicate(int[] nums) {// 快慢指针法if (nums null || nums.length 0) {return 0;}int slow 0,fast 0;do{slow nums[slow];fast nums[nums[fast]];}while(slow !fast);fast 0;while (slow !fast) {slow nums[slow];fast nums[fast];}return slow;}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83014.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!