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. Hdp安装问题杂解

    5.在安装的时候遇到的问题 5.1使用ambari-server start的时候出现ERROR: Exiting with exit code -1. 5.1.1REASON: Ambari Ser ...

  2. C++基础笔记(int转string)

    int a = 23; stringstream ss; ss << a; string s1 = ss.str(); 头文件需添加#include "sstream"

  3. day15_雷神_前端03

    # 前端 day03 内容回顾 javascript: 1.ECMAScript5.0 es6(阮一峰) es7 es8 (1)声明变量 var let (2)内置函数 Date Math.rando ...

  4. nginx反向代理mysql及负载

    下载地址: http://nginx.org/packages/mainline/centos/7/x86_64/RPMS/nginx-1.15.9-1.el7_4.ngx.x86_64.rpm 安装 ...

  5. Rabbit RPC 代码阅读(一)

    前言 因为想对RPC内部的机制作一个了解,特作以下阅读代码日志,以备忘. RPC介绍 Rabbit RPC 原理可以用3点概括: 1.服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务 ...

  6. Java 内存回收机制——GC机制

    一.Java GC 概念说明 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾 ...

  7. WebRTC 学习之 Conference 实现混音混屏

    混音 混音的意义就是将多个音频流混成一路音频,在Conference 的实现中有分为终端实现和服务器实现. 1. 终端混音实现: 终端接受到多路(一般是多个用户)的音频流之后,在终端本地将多路音频流混 ...

  8. 《JavaScript面向对象编程指南》读书笔记②

    概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的 ...

  9. web API简介(三):客户端储存之Web Storage API

    概述 前篇:web API简介(二):客户端储存之document.cookie API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. W ...

  10. setAttribute的浏览器兼容性(转)

    1.element要用getElementById or ByTagName来得到, 2.setAttribute("class", vName)中class是指改变"c ...