摘要: 题目:建立一个方法,当输入数小于等于100返回a,大于100返回b.要求是不能用if else,|| ? &&,switch case解答如下:functionf(v,a,b){v=Math.min(Math.ceil(v),101);//取小于101的数,如果>101返回101v=Math.floor(v/101);// >100返回1,<=100返回<=0v=Math.max(v,0);//去掉负数return{"0":a,"1":b}[v];}document.writeln(f(100,1,2));//等于阅读全文
posted @ 2011-11-09 01:44 KangC 阅读(1819) 评论(18) 编辑
摘要: JSON时代来临了,大家努力把它发扬光大。阅读全文
posted @ 2009-03-02 12:44 KangC 阅读(2470) 评论(1) 编辑
去除数组中重复数字。网上这样的题目解答很多,但是我感觉面试官要的最好最正确的答案是不开辟新内存及最优化的算法。

思想如下:

把指针分别指向数组头和尾,如果想等j--,i和{i+1,j}之间的数据做比较,如果想等和j位置上的数据做交换,如果j位置上的数字和i想等j--,直到和不想等j位置上的数据做交换,i++继续循环,当 i=j 时结束,见下图:

 

第一次:[1,47,89,1,18,1,47,6,90,77,50,88,89,89,0,6,1]
        i                                        j
第二次:[1,47,89,6,18,0,47,6,90,77,50,88,89,89,1,1,1
          i                                j
第三次:[1,47,89,6,18,0,89,6,90,77,50,88,89,47,1,1,1
             i                          j
第四次:[1,47,89,6,18,0,88,6,90,77,50,89,89,47,1,1,1
                i                 j
完成: [1,47,89,6,18,0,88,6,90,77,50,89,89,47,1,1,1
                                 ij

 

代码如下:

function f(arr) {
            var i = 0, j = arr.length - 1;
            while (i != j) {
                for (; i < j; i++) {
                    for (var z = i+1; z <= j; z++) {
                        if (arr[i] == arr[z]) {
                            while (arr[z] == arr[j]) { // 去除j位置上和当前比较数想等的数字。
                                j--;
                                arr.pop();
                            }
                            arr[z] = arr[j] ^ arr[z];
                            arr[j] = arr[j] ^ arr[z];
                            arr[z] = arr[j] ^ arr[z];
                            j--;
                            arr.pop();
                        }
                    }
                }
            }
            return arr; // 不用pop这里可以用arr.slice(0,i);      

}
alert(f([1,47,89,1,18,1,47,6,90,77,50,88,89,89,0,6,1]));

但上述方法比较的次数是   n2-1次 ,显然算法不是很优化。

 

算法优化

 

 

function f(arr) {
            var nArr = new Array();
            nArr.push(arr.pop());
            while(arr.length)
                nArr = t(nArr, arr.pop());
            return nArr;
        }

        function t(arr, v) {
            var len = arr.length;
            if (len == 1 && arr[0] == v)
                return arr;
            else if (len == 1 && arr[0] < v) {
                arr.push(v);
                return arr;
            }
            else if (len == 1 && arr[0] > v)
                return [v].concat(arr);
           
            var i = Math.ceil(len / 2);
            if (arr[i] > v) // 大于进入左叶比较
                return t(arr.slice(0, i), v).concat(arr.slice(i, arr.length));
            if (arr[i] < v)// 小于进入右叶比较
                return arr.slice(0, i).concat(t(arr.slice(i, arr.length), v));
            return arr;
        }

        alert(f([3,2,1,2,11,3,3,77,88,99,99,100,3,77]));

 

 

posted @ 2011-11-09 16:38 KangC 阅读(70) 评论(0) 编辑

题目:建立一个方法,当输入数小于等于100返回a,大于100返回b.要求是不能用if else,|| ? &&,switch case

解答如下:


function f(v, a, b) {
            v = Math.min(Math.ceil(v), 101);//取小于101的数,如果>101返回101
            v = Math.floor(v / 101);// >100返回1,<=100返回<=0
            v = Math.max(v, 0); //去掉负数
            return {
                "0": a,
                "1": b
            }[v];
        }
document.writeln(f(10012)); // 等于100,返回1
document.writeln(f(300"a""b")); //大于100,返回b
document.writeln(f(101"+""-")); // 大于100,返回-
document.writeln(f(-101"i""j")); // 小于100并且是负数,返回i
posted @ 2011-11-09 01:44 KangC 阅读(1819) 评论(18) 编辑
摘要: Linux技术杂谈。阅读全文
posted @ 2011-03-26 04:51 KangC 阅读(2804) 评论(3) 编辑
摘要: extend 的使用说穿了很简单,无非2类。 实现: $.extend(对象A,对象B); 就是把对象B中的内容复制进对象A中,JAVAZ中Struts框架中的BeanUtils $.extend(“新对象”,对象B);就是类似于JAVA和C#中的new 好了这些都不支持对象的对象的互换。 至于使用二个以上的参数都是以此类推的方式。 现在我提供一个支持对象的对象,包括对象的集合中的对象的复制方法,这样可以支持复杂对象的复制。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlig阅读全文
posted @ 2009-06-25 13:12 KangC 阅读(1387) 评论(3) 编辑
摘要: 最近小弟一直在想啊,强类型语言好那,还是弱类型语言好,从个人感情上而 言,小弟最初学的是JAVA(其实应该是C,没学好不敢说自己学过呵呵~),后来又学了C#,都是强类型语言,后来工作了,因为需要,“被逼”学了js。 小弟有想,强类型语言就像石头,它是什么样子就是什么样子的,你要改变它必须花点力气,例如:我们把一个学生实体强转成老师实体是肯定不行的,但小弟有在想啊,我以前有个兄弟读大学的时候是学生,毕业了后留校当了老师了,那我们用程序怎么实现那?按强类型方式:老师类.姓名 = 学生类.姓名 老师类.性别 = 学生类.性别。。。。。。对它们一一的装箱拆箱,这样很严谨。后来啊,我们发现如果属性一多,阅读全文
posted @ 2009-03-03 02:33 KangC 阅读(2231) 评论(20) 编辑
摘要: 小弟最近很迷恋JSON,以至于俺媳妇也吃起JSON的醋来(开个玩笑,呵呵)。至于小弟举的例子算不算面向切面(AOP),仁者见仁,智者见智。只是小弟对JSON的一种使用小技巧。我可能使用AJAX,然后从后台调用一段数据,该数据可能是JSON格式的。例如:{name:"张三",sex:1}好了我们需要做的就是把sex转换成中文,当然你可以选择在后台处理,当然我们也会选择在前台完成?当我们把数据一个一个...阅读全文
posted @ 2009-03-02 16:26 KangC 阅读(2357) 评论(18) 编辑
摘要: JSON时代来临了,大家努力把它发扬光大。阅读全文
posted @ 2009-03-02 12:44 KangC 阅读(2470) 评论(1) 编辑
摘要: 一直以来都是从事微软的ASP.NET的网站开发,说老实话微软的事件模型,比起J2EE的JSF那是强太多了,但讲到性能事件模型估计十有八九不如MVC框架(没研究过,只是人云亦云),但从WEB开发而言前端性能及网络问题是WEB开发人员最需要考虑的,特别是网站开发,你是无法左右这二者性能高低及运行通畅的,你总不能像搞网络游戏那样,告诉用户:“兄弟啊,你想玩吗?那你必须符合XX配置”...阅读全文
posted @ 2009-02-27 01:29 KangC 阅读(4000) 评论(47) 编辑
摘要: JSON时代来临了,大家一起讨论如何发扬光大它阅读全文
posted @ 2008-12-09 20:47 KangC 阅读(610) 评论(0) 编辑
摘要: JSON时代来临了,大家一起讨论如何发扬光大它阅读全文
posted @ 2008-12-08 23:56 KangC 阅读(2515) 评论(3) 编辑