经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
Leetcode#442. Find All Duplicates in an nums(数组中重复的数据)
来源:cnblogs  作者:武培轩  时间:2018/9/25 19:12:31  对本文有异议

题目描述

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。

找到所有出现两次的元素。

你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?

示例:

  1. 输入:
  2. [4,3,2,7,8,2,3,1]
  3. 输出:
  4. [2,3]

思路

思路一:

直接利用hashmap记录出现次数

思路二:

因为数组输入的特点 1<=a[i]<=n,则可以把原数组当hash表用 ,因为原数组是正数,标为负数表示出现过,如果遇到负数就表示第二次出现,就可以找出所有出现过两次的元素

代码实现

  1. package Array;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. /**
  6. * 442. Find All Duplicates in an nums(数组中重复的数据)
  7. * 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。
  8. * 找到所有出现两次的元素。
  9. */
  10. public class Solution442 {
  11. public static void main(String[] args) {
  12. Solution442 solution442 = new Solution442();
  13. int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};
  14. List<Integer> res = solution442.findDuplicates(nums);
  15. System.out.println(res.toString());
  16. }
  17. /**
  18. * 直接利用hashmap记录出现次数
  19. *
  20. * @param nums
  21. * @return
  22. */
  23. public List<Integer> findDuplicates(int[] nums) {
  24. List<Integer> res = new ArrayList<>();
  25. if (nums == null || nums.length == 0) {
  26. return res;
  27. }
  28. HashMap<Integer, Integer> map = new HashMap<>();
  29. int count;
  30. for (int val :
  31. nums) {
  32. if (!map.containsKey(val)) {
  33. map.put(val, 1);
  34. } else {
  35. count = map.get(val);
  36. map.put(val, ++count);
  37. }
  38. if (map.get(val) == 2) {
  39. res.add(val);
  40. }
  41. }
  42. return res;
  43. }
  44. /**
  45. * 因为数组输入的特点 1<=a[i]<=n,则可以把原数组当hash表用 ,因为原数组是正数,标为负数表示出现过,如果遇到负数就表示第二次出现,就可以找出所有出现过两次的元素
  46. *
  47. * @param nums
  48. * @return
  49. */
  50. public List<Integer> findDuplicates_2(int[] nums) {
  51. List<Integer> res = new ArrayList<>();
  52. for (int i = 0; i < nums.length; ++i) {
  53. int index = Math.abs(nums[i]) - 1;
  54. if (nums[index] < 0) {
  55. res.add(Math.abs(index + 1));
  56. }
  57. nums[index] = -nums[index];
  58. }
  59. return res;
  60. }
  61. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号