日期:2014-05-17 浏览次数:20578 次
int[] array = new int[] { 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
var v = Enumerable.Range(1, 20).Except(array);
foreach (var t in v)
{
Console.WriteLine(t);
}
------解决方案--------------------
int[] a = { 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
int[] b = new int[21];
for (int i = 0; i < a.Length; i++)
b[a[i]] = 1;
for (int i = 1; i < b.Length; i++)
if (b[i] != 1)
Response.Write(string.Format("{0},", i) + "<br>");
------解决方案--------------------
分治吧,分两个区间,看每个区间缺几个。
缺的区间继续2分。不缺的区间不用处理。
这样递归下去。
------解决方案--------------------
这个遍历的时间复杂度很明显是较高的,用二分法查找吧,总体上来说效率会高一点……
其实这里我觉得在使用二分法的时候,不要那么死板,可以考虑一下上面说的,同时分区间,看区间长度,进行查找(这里说白了,还是二分法)
------解决方案--------------------
int[] array = new int[] { 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
int x=1;//标识初值
for(int i=0;i<array.length;i++)
{
if(array[i]!=x)
{
Console.WriteLine(array[i]);
i--;//如果此位置缺失则继续判断此位置的数
}
x++;//增量
}
------解决方案--------------------
int[] array = new int[] {12, 13, 14, 15, 16, 17, 18, 19, 20 };
var result = Enumerable.Range(1, 20).Except(array);
------解决方案--------------------
常用的方法就是这个建立连续的整形数组了。