|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 |
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
原文:http://www.cnblogs.com/xuezhizhang/p/3557149.html