博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Intersection of Two Arrays i,ii查找两个数组的公共元素
阅读量:4187 次
发布时间:2019-05-26

本文共 2843 字,大约阅读时间需要 9 分钟。

/***************************************************************************************** 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.****************************************************************************************///用set#include "stdafx.h"#include 
#include
#include
using namespace std;vector
intersection(vector
&num1, vector
&num2){ set
s1, s2; vector
result; auto iter = num1.begin(); for (; iter != num1.end(); ++iter) s1.insert(num1[*iter]); auto iter2 = num2.begin(); for (; iter2 != num2.end(); ++iter2) if (s1.find(*iter2) != s1.end())//说明在s1中找到了相同的数 s2.insert(*iter2);//插入s2中 auto iter3 = s2.begin();//s2中全是查找相同的元素,且没有重复的值 for (; iter3 != s2.end(); ++iter3) result.push_back(*iter3); return result;}

用哈希表

class Solution {    public:    vector
intersection(vector
& nums1, vector
& nums2) { unordered_map
m; vector
res; for (int i=0;i
0) { res.push_back(nums2[i]); m[nums2[i]]=0; } } return res; }};

主要下面题目的不同

/*****************************************************************************

*
* Given two arrays, write a function to compute their intersection.
*
* Example:
* Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].
*
* Note:
* Each element in the result should appear as many times as it shows in both arrays.
* The result can be in any order.
*
* Follow up:
* What if the given array is already sorted? How would you optimize your algorithm?
* What if nums1’s size is small compared to num2’s size? Which algorithm is better?
* What if elements of nums2 are stored on disk, and the memory is limited such that you
* cannot load all elements into the memory at once?
*
*****************************************************************************/

哈希表,时间复杂度O(N),空间O(N)

class Solution {public:   vector
intersect(vector
& nums1, vector
& nums2) { unordered_map
m; vector
res; for (int i=0;i
0) { res.push_back(nums2[i]); m[nums2[i]]--; } } return res;}};

排序,无额外空间复杂度

class Solution {public:   vector
intersect(vector
& nums1, vector
& nums2) { vector
res; sort(nums1.begin(),nums1.end()); sort(nums2.begin(),nums2.end()); int n1=nums1.size(),n2=nums2.size(); int i=0,j=0; while (i
nums2[j]) j++; else i++; } return res;}};

转载地址:http://iidoi.baihongyu.com/

你可能感兴趣的文章
TCL中有关regexp匹配表达式的说明
查看>>
scandef格式详细说明
查看>>
gvim使用指南(学好就可下山了)
查看>>
Halide入门教程第2讲:处理图像
查看>>
Halide入门第3讲:如何设置环境变量以检查llvm编译生成的代码
查看>>
git 更新和冲突解决简单流程
查看>>
Lattice FPGA 使用指南1 - clarity designer出现ERROR – Error trying to create component 错误的解决办法
查看>>
verdi加载vhdl和verilog混合RTL设计的方法
查看>>
verdi编译vhdl文件时,报出"warning:*Warn* Unknown argument –vhdl08"的解决 办法
查看>>
linux 常见命令总结
查看>>
信号差分对的优势说明
查看>>
verilog timescale的两种仿真处理方法
查看>>
lattice FPGA 使用指南2 - DDR3 sdram controller IP配置注意事项
查看>>
何谓“pessimistic”异步FIFO的full和empty信号
查看>>
*Error* illegal LHS in continous assignment
查看>>
Cadence IUS 之一:简介
查看>>
在gvim中使用Emacs verilog mode的verilog代码自动插入和自动插入撤销的方法。
查看>>
Emacs Verilog mode 简单使用指南
查看>>
AXI 总线基本概念1 - 如何理解outstanding传输
查看>>
DDR3基本概念1 - 存储单元结构和原理
查看>>