两个有序数组长度分别为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 ...
随机推荐
- 12. The Biggest Safety Threat Facing Airlines 航空公司面临的最大安全威胁
12. The Biggest Safety Threat Facing Airlines 航空公司面临的最大安全威胁 (1) The biggest safety threat facing air ...
- 1001. A+B Format 字符串
题目及答案链接 https://www.liuchuo.net/archives/1888 c++ 有关 字符串 和各种类型的转换 #include <string> string a; ...
- Shell脚本学习-echo命令
跟着RUNOOB网站的教程学习的笔记 shell的echo指令与PHP的echo指令类似,都是用于字符串的输出.命令格式: echo string 1 显示普通字符串 echo "It is ...
- 日期Data类,日历类Calendar
用于得到当前时间,和设置日期类数据 public void testDate() { // 创建一个日期对象 Date date = new Date(); /** * 从1900年1月1日 00:0 ...
- 一个自己实现的js表单验证框架。
经常要做一些表单验证的操作,每次都是用现成的框架,比如jquery,bootstrap等的验证插件,虽然也很强大,也很好用,可就是用起来需要引入许多js库,还有里面功能太多,感觉不太符合自己的需求.最 ...
- Linux 线程编程2.0——线程同步-互斥锁
当我们需要控制对共享资源的存取的时候,可以用一种简单的加锁的方法来控制.我们可以创建一个读/写程序,它们共用一个共享缓冲区,使用互斥锁来控制对缓冲区的存取. 函数 pthread_mutex_init ...
- VS工具栏没有出现可用工具的情况
(1)没有切换到资源视图,打开具体的对话框. (2)如果你在调试状态,即使打开了具体的对话框,VS工具箱还是不会出现可用的控件的.所以不要在调试状态下添加控件.
- CS231中的python + numpy课程
本课程中所有作业将使用Python来完成.Python本身就是一种很棒的通用编程语言,现在在一些流行的库(numpy,scipy,matplotlib)的帮助下,它为科学计算提供强大的环境. 我们希望 ...
- JSON 字符串解析技巧总结
在解析JSONObject的字符数据的时候,可以考虑去使用optString 解析网络JSON数据时,获取数据的两个方法optString和getString: 使用optString获取数据时,即使 ...
- RSA实现JS前端加密,PHP后端解密
web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...