牛客(两个数组的交集)

2024-09-03 23:44
文章标签 数组 牛客 两个 交集

本文主要是介绍牛客(两个数组的交集),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NC313 两个数组的交集

  • 题目
  • 题解(19)
  • 讨论(7)
  • 排行
  • 面经

    new

简单  通过率:29.64%  时间限制:1秒  空间限制:256M

知识点二分哈希排序双指针

描述

给定两个整数数组分别为𝑛𝑢𝑚𝑠1nums1, 𝑛𝑢𝑚𝑠2nums2,找到它们的公共元素并按返回。

数据范围:

1≤𝑛𝑢𝑚𝑠1.𝑙𝑒𝑛𝑔𝑡ℎ,𝑛𝑢𝑚𝑠2.𝑙𝑒𝑛𝑔𝑡ℎ≤10001≤nums1.length,nums2.length≤1000
1≤𝑛𝑢𝑚𝑠1[𝑖],𝑛𝑢𝑚𝑠2[𝑖]≤10001≤nums1[i],nums2[i]≤1000

思路:

法一:用两个set先对两个数组去重,然后对其中一个set进行遍历,每个元素去另一个set里面找。

法二:对两个数组从小到大排序,然后两个指针分别指向两个数组头部,依次比较,注意去重。

法三:本题数字变化比较小,因此可以用一个bool类型数组,下标表示以下标为元素是否出现在nums1中。然后在nums2中找是否出现过即可,注意去重的方法可以是第一次找到后改为false。

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums1 int整型vector * @param nums2 int整型vector * @return int整型vector*/vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {// write code here// sort(nums1.begin(),nums1.end());// sort(nums2.begin(),nums2.end());// int r1=nums1.size(),r2=nums2.size();// int l1=0,l2=0;// vector<int>ret;// while(l1<r1&&l2<r2)// {//     if(nums1[l1]<nums2[l2])//     {//         l1++;//     }//     else if(nums1[l1]>nums2[l2])//     {//         l2++;//     }//     else {//         //判断是否重复//         if(ret.size()==0||ret.back()!=nums1[l1])//      ret.push_back(nums1[l1]);//      l1++,l2++;//     }// }// return ret;// set<int>hash;//  set<int>hash1;// for(auto e:nums1)// {//     hash.insert(e);// }// for(auto e:nums2)// {//     hash1.insert(e);// }// vector<int>ret;// for(auto e:hash1)// {//     if(hash.count(e))//     {//         ret.push_back(e);//     }// }//  return ret;vector<bool>hash(1001);for(auto e:nums1){hash[e]=true;}vector<int>ret;for(auto e:nums2) {if(hash[e]){hash[e]=false;ret.push_back(e);}}return ret;}
};

这篇关于牛客(两个数组的交集)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134386

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

PHP7扩展开发之数组处理

前言 这次,我们将演示如何在PHP扩展中如何对数组进行处理。要实现的PHP代码如下: <?phpfunction array_concat ($arr, $prefix) {foreach($arr as $key => $val) {if (isset($prefix[$key]) && is_string($val) && is_string($prefix[$key])) {$arr[

Go 数组赋值问题

package mainimport "fmt"type Student struct {Name stringAge int}func main() {data := make(map[string]*Student)list := []Student{{Name:"a",Age:1},{Name:"b",Age:2},{Name:"c",Age:3},}// 错误 都指向了最后一个v// a