• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
neverlandly
博客园    首页    新随笔    联系   管理    订阅  订阅

Leetcode: Intersection of Two Arrays

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].

Note:
Each element in the result must be unique.
The result can be in any order.

Use two hash sets

Time complexity: O(n)

注意Set<Integer> set = new HashSet<>(); 第二个泛型可以不写出

 1 public class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         Set<Integer> set = new HashSet<>();
 4         Set<Integer> intersect = new HashSet<>();
 5         for (int i = 0; i < nums1.length; i++) {
 6             set.add(nums1[i]);
 7         }
 8         for (int i = 0; i < nums2.length; i++) {
 9             if (set.contains(nums2[i])) {
10                 intersect.add(nums2[i]);
11             }
12         }
13         int[] result = new int[intersect.size()];
14         int i = 0;
15         for (Integer num : intersect) {
16             result[i++] = num;
17         }
18         return result;
19     }
20 }

Iterator iter = set2.iterator();
for (int i=0; i<res.length; i++) {
res[i] = (int)iter.next();
}

用iterator也可以,但要注意.next()之后要转换为int

 

Sort both arrays, use two pointers

Time complexity: O(nlogn)

 1 public class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         Set<Integer> set = new HashSet<>();
 4         Arrays.sort(nums1);
 5         Arrays.sort(nums2);
 6         int i = 0;
 7         int j = 0;
 8         while (i < nums1.length && j < nums2.length) {
 9             if (nums1[i] < nums2[j]) {
10                 i++;
11             } else if (nums1[i] > nums2[j]) {
12                 j++;
13             } else {
14                 set.add(nums1[i]);
15                 i++;
16                 j++;
17             }
18         }
19         int[] result = new int[set.size()];
20         int k = 0;
21         for (Integer num : set) {
22             result[k++] = num;
23         }
24         return result;
25     }
26 }

 

 

Binary search

Time complexity: O(nlogn)

 1 public class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         Set<Integer> set = new HashSet<>();
 4         Arrays.sort(nums2);
 5         for (Integer num : nums1) {
 6             if (binarySearch(nums2, num)) {
 7                 set.add(num);
 8             }
 9         }
10         int i = 0;
11         int[] result = new int[set.size()];
12         for (Integer num : set) {
13             result[i++] = num;
14         }
15         return result;
16     }
17     
18     public boolean binarySearch(int[] nums, int target) {
19         int low = 0;
20         int high = nums.length - 1;
21         while (low <= high) {
22             int mid = low + (high - low) / 2;
23             if (nums[mid] == target) {
24                 return true;
25             }
26             if (nums[mid] > target) {
27                 high = mid - 1;
28             } else {
29                 low = mid + 1;
30             }
31         }
32         return false;
33     }
34 }

 

posted @ 2016-11-24 10:34  neverlandly  阅读(314)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3