/*携程面试*/四个数组,都已经排好序,找出四个数组的交集

首先找连个数组的交集,分别指定i,j指向连个数组头部,对i,j进行

比较,i的值大于j的值,j++;i的值小于j的值,i++;相等,则保存;?

然后再求连个交集的交集;复杂度应为O(M+N+P+Q)?

//求数组a,b交集;交集存于a,并返回k,k为交集长度;

 1 //求数组a,b交集;交集存于a,并返回k,k为交集长度;
 2 Intersection(int a[],int b[],int a_size,int b_size)
 3 {
 4     if(a_size<=0&&b_size<=0) exit(0);
 5     int i=0,j=0,k=0;
 6     while(i<a_size&&j<b_size)
 7     {
 8         if(a[i]>a[j]) j++;
 9         else if(a[i]<a[j]) i++;
10         else
11         {
12             a[k]=a[i];
13             i++;
14             j++;
15             k++;
16         }
17     }
18     return k;
19 }
//求a,b,c,d的交集;交集存于a,并返回k,k为交集长度;
Intersection_4(int a[],int b[],int c[],int d[],int a_size,int b_size,int c_size,int d_size)
{
    a.size=Intersection(a,b,a_size,b_size);
    c.size=Intersection(c,d,c_size,d_size);
    return Intersection(a,c,a_size,c_size);
}
时间: 2024-09-29 16:03:29

/*携程面试*/四个数组,都已经排好序,找出四个数组的交集的相关文章

Java程序员从京东、阿里、携程面试回来,已成功拿到京东offer

阿里巴巴(一面) 阿里找了一个前辈内推的,准确来说应该是直推,是他帮我直接录的简历,他本科进的阿里蚂蚁金服,厉害吧?是真的佩服.第一次在官网上填资料,想想马云有多出名,想想蚂蚁金服这样的顶级技术,有些兴奋,有些期待. 录完简历后等待简历评估,原来,找内推不一定能得到面试机会,能不能得到面试机会要经过简历评估(我这才知道,原来内推免笔试可不是那么容易的),毕竟内推能免去在线笔试直接面试,互联网第一梯队像百度.阿里,腾讯的笔试真的很有难度,做过前几年这些公司的笔试题,真的太难了.在阿里的校招群里看到

Single Number 数组中除了某个元素出现一次,其他都出现两次,找出这个元素

Given an array of integers, every element appears twice except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 数组中除了某个元素出现一次,其他都出现两次,找出只出现一次的元素. 一个数字和自己异或

Java 找出四位数的全部吸血鬼数字 基础代码实例

/** * 找出四位数的全部吸血鬼数字 * 吸血鬼数字是指位数为偶数的数字,能够由一对数字相乘而得到,而这对数字各包括乘积的一半位数的数字,当中从最初的数字中选取的数字能够随意排序. * 以两个0结尾的数字是不同意的. *   比例如以下列数字都是吸血鬼数字 1260=21*60 1827=21*87 2187=27*81 ... * 比較笨的低效率的做法: 遍历全部四位数, 每生成一个四位数的时候, *         在双重循环遍历两位数,在两位数的内层循环中推断是否与最外层循环的四位数相等

锦程网考试由试题从模拟题中批量找出答案,Python

jincin的考试又来了,像往常一样会先有模拟题发下来,而考试题目几乎都在里面原题. 本来是,在考试时,把题目一题一题地在模拟题里搜,但觉得太累了. 于是写了一个Python的脚本批量查找,用到正则,由于不知道行尾是\r还是\n还是\r\n,干脆也用正则,而非split('\r')这么硬板了. 添了颜色,效果不错. Python: 效果: - 锦程网考试由试题从模拟题中批量找出答案,Python,布布扣,bubuko.com

9.11排序与查找(六)——给定M*N矩阵,每一行、每一列都按升序排列,找出某元素

/** * 功能:给定M*N矩阵,每一行.每一列都按升序排列,找出某元素. */ 两种方法: 方法一: /** * 思路:若列的末端大于x,那么x位于该列的左边:若行的开头小于x,那么x位于列的下边.从矩阵中的子矩阵中查找元素. * @param matrix * @param elem * @return */ public static boolean findElement(int[][] matrix,int elem){ int row=0; int col=matrix[0].len

C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)

///////////////////////////////////////////////////////// //数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. //例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}. //由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. #include <iostream> using namespace std; int Grial(int a[],int n) { if(n==0)return -1;

找出两个数组的相同元素,最优算法?

在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值.而且其中一个json最后输出格式还需要改变下属性名,思来想去觉得和"找出两个数组相同元素"很像,所以做下总结. "有一个数组A{0,2,3,5}和一个数组B{3,5,6,2,1,1},找出这两个数组相同元素." 一开始抽象出这道题时,脑海里浮现出最简单粗暴的方法,逐一比较. //最简单粗暴的做法,逐个比较,时间复杂度为(B

找出2个数组相同的项,并将其保存在另外一个数组中

#include <stdio.h> //找出2个数组相同的项,并将其保存在另外一个数组中 int main(){ int buf1[]={1,2,3}; int buf2[]={2,3,4}; int des[3]; int count=0; for(int i=0;i<sizeof(buf1)/sizeof(int);i++) //遍历buf1 { for(int j=0;j<sizeof(buf2)/sizeof(int);j++) //遍历buf2 { if(buf1[i]

找出一个整数数组中超过数组长度一半的元素(Java)

Question:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字 package com.study.zhipengs.test; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. * 例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, * 2}.由于数字2在数组中出现了5次,超过数组长度

【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}, 由于数组中数字2出现了5次,超过数组的长度的一半,因此输出2 一种办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素. 第二种办法比较抽象,设一个变量保存当前值,设一个次数,当前值与下一个值进行比较,如果相等,次数加一,如果不相等,次数减一,如果次数减到0了还是不相等,就把当前值替换掉.代码如下: #include <stdio.h> #includ