两个有序数组长度分别为m,n,最多m+n次查找找出相同的数
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次查找找出相同的数的更多相关文章
- leetcode 4 寻找两个有序数组的中位数 二分法&INT_MAX
小知识 INT_MIN在标准头文件limits.h中定义. #define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1) 题解思路 其实是类似的二分 ...
- LeetCode Golang 4. 寻找两个有序数组的中位数
4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ...
- [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 ...
- 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...
- 选取两个有序数组中最大的K个值,降序存入另一个数组中
原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...
- 高效合并两个有序数组(Merge Sorted Array)
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...
- 【递归打卡2】求两个有序数组的第K小数
[题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...
- 两个有序数组的中位数(第k大的数)
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 感觉这种题目挺难的,尤其是将算法完全写对.因为当初自己微软面试的时候遇到了,但是没有想出来思路. ...
- 【LeetCode】4. 寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
随机推荐
- usb协议栈学习笔记
1.usb 集线器为什么一般都是只有4个扩展口? PC的根集线器可为每个A型连接器提供5V.500mA电源.一个总线供电的外部集线器可为每个端口提供100mA电流.由于USB为为外部集线器电路分配10 ...
- 在Azure DevOps Server(TFS系统)中部署回退/回滚方案(Rollback)
概述 Azure DevOps Server(之前名TFS)是微软公司实现软件研发.测试和部署一体化的全流程解决方案.在近几年的研发过程中,Azure DevOps Server 大幅增强了软件部署过 ...
- C#.Net平台与OPC服务器通讯
最近,我们Ndolls工作室承接了山大某个自动化控制项目,主要做了一套工控信息化系统,其中有一个功能模块是将系统管理的一部分数据参数发送至OPC服务器,由OPC服务器接收数据后执行相应工控操作.第一次 ...
- 设置Acad2008默认启动 win10设置默认cad2008启动 调试设置.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\AutoCAD.Drawing.17\shell\open\command]@=&quo ...
- 几种简单的编码(为什么使用ASCII码)
二-十进制码(BCD码) 在目前的数字系统中,一般是采用二进制数进行运算的,但是由于人们习惯采用十进制数,因此常需进行十进制数和二进制数之间的转换,其转换方法上面已讨论过了.为了便于数字系统处理十进制 ...
- 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
本系列文章引用了腾讯技术专家樊华恒<海量之道系列文章之弱联网优化>的部分章节,感谢原作者. 1.前言 随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成 ...
- 字符串拼接时使用StringBuffer还是StringBuilder?
StringBuffer.StringBuilder和String一样,也用来代表字符串.String类是不可变类,任何对String的改变都 会引发新的String对象的生成:StringBuffe ...
- JavaScript控制页码的显示与隐藏
前端页面开发分页显示功能时,一般都要求使用自定义的页码样式,直接用网上分页插件就比较麻烦了,这里记录一下工作中总结的一个比较简单通用的控制页码显示与隐藏的的js代码. 首先是使用时需要自己根据自己具体 ...
- 阿里开源项目arthas在docker环境初始化
需求 我前一篇是在window环境下做的测试,实际情况现在的生成环境程序都部署在了docker环境下,此环境对arthas可能会缺失很多必要组件 目前的基础环境是在docker容器中,只存在基本的to ...
- php省市联动实现
设计模式:ajax实现,数据库格式:id,name,parent_id 数据库: CREATE TABLE IF NOT EXISTS `city` ( `id` ) NOT NULL AUTO_IN ...