using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions; namespace ConsoleApplication1
{
class CompareArr
{
static void Main(string[] args)
{
try
{
int[] srcArr1 = new int[] { 2, 5, 6, 8, 10, 17, 29, 33, 43 };//假设数组长度为m
int[] srcArr2 = new int[] { 1, 3, 4, 7, 8, 13, 19, 20, 29, 39, 43 };//假设数组长度为n int[] resultArr = GetSameItem(srcArr1, srcArr2);//方法1 面试官要的答案,所谓的最多m+n次查找
//int[] resultArr = srcArr1.Where(t => srcArr2.Contains(t)).ToArray();//方法2:直接使用LINQ
//int[] resultArr = GetSameItemByContains(srcArr1, srcArr2);//方法3 使用遍历加Contains方法
//其他方法:折半查找 if (resultArr.Length > 0)
{
//Console.WriteLine(string.Format("srcArr1 {0}\nsrcArr2 {1}\n相同数字如下:", string.Join(",", srcArr1), string.Join(",", srcArr2)));
Console.WriteLine("srcArr1 srcArr2 相同数字如下:");
foreach (int item in resultArr)
{
Console.WriteLine(item.ToString());
}
}
else
{
Console.WriteLine("无相同数字");
}
Console.Read(); }
catch (Exception ex)
{
//记录异常
}
} /// <summary>
/// 查找两个有序数组中的相同数
/// 面试官要的答案,所谓的最多m+n次查找
/// </summary>
/// <param name="srcArr1">有序数组1</param>
/// <param name="srcArr2">有序数组2</param>
/// <returns>数组,找到的相同数</returns>
static protected int[] GetSameItem(int[] srcArr1, int[] srcArr2)
{
List<int> resultArr = new List<int>();
int temIndex = 0; for (int i = 0; i < srcArr1.Length; i++)
{
for (int j = temIndex; j < srcArr2.Length; j++)
{
if (srcArr1[i] > srcArr2[j])
{
continue;
}
else if (srcArr1[i] < srcArr2[j])
{
temIndex = j;
break;
}
else
{
temIndex = j + 1;
resultArr.Add(srcArr1[i]);
}
}
} return resultArr.ToArray();
} /// <summary>
/// 查找两个有序数组中的相同数
/// 使用遍历加Contains方法
/// </summary>
/// <param name="srcArr1">有序数组1</param>
/// <param name="srcArr2">有序数组2</param>
/// <returns>数组,找到的相同数</returns>
static protected int[] GetSameItemByContains(int[] srcArr1, int[] srcArr2)
{
List<int> resultArr = new List<int>();
for (int i = 0; i < srcArr1.Length; i++)
{
if (srcArr2.Contains<int>(srcArr1[i]))
{
resultArr.Add(srcArr1[i]);
}
}
return resultArr.ToArray();
}
}
}

其他人的分析总结:http://blog.csdn.net/insistgogo/article/details/9228015

http://hi.baidu.com/algorithms/item/186115ec71d696abc00d757a

两个有序数组长度分别为m,n,最多m+n次查找找出相同的数的更多相关文章

  1. leetcode 4 寻找两个有序数组的中位数 二分法&INT_MAX

    小知识 INT_MIN在标准头文件limits.h中定义. #define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1) 题解思路 其实是类似的二分 ...

  2. LeetCode Golang 4. 寻找两个有序数组的中位数

    4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ...

  3. [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  4. 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays

    一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...

  5. 选取两个有序数组中最大的K个值,降序存入另一个数组中

    原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...

  6. 高效合并两个有序数组(Merge Sorted Array)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...

  7. 【递归打卡2】求两个有序数组的第K小数

    [题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...

  8. 两个有序数组的中位数(第k大的数)

    问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 感觉这种题目挺难的,尤其是将算法完全写对.因为当初自己微软面试的时候遇到了,但是没有想出来思路. ...

  9. 【LeetCode】4. 寻找两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

随机推荐

  1. 文件类File

    文件类File继承结构: public class File extends Object implements Serializable, Comparable<File> 常用方法: ...

  2. ScriptOJ-unique#89

    一般做法 const unique = (arr) => { const result = arr.reduce((acc, iter) => { if(acc.indexOf(iter) ...

  3. 展示博客---Alpha版本展示

    Alpha版本展示 1. 团队成员的简介和个人博客地址,团队的源码仓库地址. 成员 简介 个人博客地址 祁泽文 被动态统计图搞扒下的我 http://www.cnblogs.com/jiaowoxia ...

  4. win7 装docker

    Win7安装Docker 主要是装这个 ,官网没有win7版本 Docker Toolbox on Windows

  5. 从文本中读取字符——feof函数问题

    feof()函数 函数原型:int feof(FILE *fp): 函数功能:检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()函数清除 (函数feof ...

  6. IntelliJ IDEA 注册码(因为之前的地址被封杀了,所以换了个地址)

    附上IntelliJ IDEA 注册码(感谢提供注册码的大神):http://idea.qinxi1992.cn/(已封杀) http://idea.lanyus.com/(新地址) 注:以前直接复制 ...

  7. [CocoaPods]制作CocoaPod

    创建自己的CocoaPod非常简单.如果你已经有一个单独的组件,那么你就是最重要的.本指南概述了整个过程,本节中的其他指南更适合更高级用户. 我们建议让CocoaPods在这里努力工作.Running ...

  8. Spring boot 使用 configuration 获取的属性为 null

    1. 未设置 getter(),setter()方法,导致属性值注入失败: 2. spring 未扫描到该组件,在其他类中注入该对象失败,可在配置类添加 @configuration 或者 @comp ...

  9. Dispatch Queue 之内存中常驻的几个结构

    _dispatch_main_q 也就是主要主队列,一定运行在主线程里. // 6618342 Contact the team that owns the Instrument DTrace pro ...

  10. JAVA实现调用微信js-sdk扫一扫

    喜欢的朋友可以关注下. 已经很久没有给大家分享一片技术文章了,今天抽了点时间来,给大家说一说如何调用微信提供的扫一扫接口. 前提: 需要申请一个公众号:申请公众号需要的资料我就不说了,去申请微信会提示 ...