日期:2014-05-17 浏览次数:20497 次
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);
------解决方案--------------------
常用的方法就是这个建立连续的整形数组了。