一道算法题,大家知无不言哈。 问:一个连续元素的乱序数组,如:1,2,3...100,如果我随意去掉一个元素,问怎样通过简单的算法得到我去除的是哪个元素? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var i = [1,2,3,4...];i.sort();for(var tmp in i) { if(tmp+rules != i[tmp]) { //就是你 }} 问题:1.sort()排序函数用法有问题吧? 2.rules是什么? rules 是你定义的规则sort方法也可以随你定制。 唉.用JQuery:返回值:NumberjQuery.inArray(value, array)概述确定第一个参数在数组中的位置,从0开始计数(如果没有找到则返回 -1 )。参数valueAny用于在数组中查找是否存在arrayArray待处理数组。示例var arr = [ 4, "Pete", 8, "John" ];jQuery.inArray("John", arr); //3jQuery.inArray(4, arr); //0jQuery.inArray("David", arr); //-1 这个高效,但是代价是用空间换时间,但对JS来说无所谓了。var a=[1,2,...100] var b=[]; for(var i in a) { b[a[i]]=a[i]; } for(var i=1;i<=100;i++) { if(!b[i]) { alert(i);//拿走的数 break; } } 你是用什么方法来删除数组中的元素的?如果是用splice,那直接a= arr.splice(1,1)就可以了,splice返回的就是你删除的那个元素。 一般而言,可以把问题转换为求原数组与随意去掉元素后数组的差集,该差集就是你去除的是哪些元素。<script type=text/javascript>Array.prototype.differenc = function(arr) { var rel = [], hsh = {}; var arr = this.concat(arr||[]); for (var i = 0; arr[i]; i ++) { hsh[arr[i]] = hsh[arr[i]] ? 0 : !0; } for (var o in hsh) hsh[o]&&rel.push(o); return rel}var x = [1, 2, 3, 4, 5, 6]; // 原数组var y = [1, 2, 3, 4]; // 原数组随意去掉元素后alert(x.differenc(y)) // 你去掉的元素</script> box sort对这个需求来说没那个必要首先js的sort函数效率不低了。其次用js如果对性能瓶颈要求这么高的话,可能需要考虑下转到后台去做这个事了 var n = 100; // 最大数var l = [1, 2, 3, .... 4]; // 无序的被抽取的数组var s = 0;for (var i = 0; i < l.lenght; i++) { s += l[i];}alert((n + 1) / 2 * n - s); // 输出结果 大叔lenght => length没测试吧 如果不考虑普适性,就LZ的题意,还是12#的思路简洁明了。var arr0 = [5, 10, 8, 4, 1, 6, 7, 3, 9, 2];var arr1 = [1, 6, 9, 4, 5, 2, 8, 3, 10];alert(eval(arr0.join("+")) - eval(arr1.join("+"))) BWT:我感到疑虑的是LZ所云:“一个连续元素的乱序数组”。“连续元素”是单指连续的数字(1、2、3 ...),还是包括连续的字母(a、b、c ...)? 关于eval的问题 关于 JQ中$.getJSON 的超时BUG 提问! 赋值出错? 如何用js去设置按钮不可用的属性 disabled? javascript有什么判断空值的好方法 真心求教 本人js小白 这段js图片轮播图片不兼容火狐 火狐下不显示滚动图片 按钮提交的问题 不用循环如何获取FORM中input:text元素的索引号??? 表单验证时,判断输入的值是不是以“13”开头的。 如何通过程序保存一个网页? 使用js调用两次冲突...我也知道是ID不能重复但是不懂怎么改.. 一个js兼容性的问题
i.sort();
for(var tmp in i) {
if(tmp+rules != i[tmp]) {
//就是你
}
}
问题:1.sort()排序函数用法有问题吧?
2.rules是什么?
sort方法也可以随你定制。
用JQuery:
返回值:NumberjQuery.inArray(value, array)
概述
确定第一个参数在数组中的位置,从0开始计数(如果没有找到则返回 -1 )。
参数
valueAny用于在数组中查找是否存在arrayArray待处理数组。示例var arr = [ 4, "Pete", 8, "John" ];
jQuery.inArray("John", arr); //3
jQuery.inArray(4, arr); //0
jQuery.inArray("David", arr); //-1
{
b[a[i]]=a[i];
}
for(var i=1;i<=100;i++)
{
if(!b[i])
{
alert(i);//拿走的数
break;
}
}
Array.prototype.differenc = function(arr) {
var rel = [], hsh = {};
var arr = this.concat(arr||[]);
for (var i = 0; arr[i]; i ++) {
hsh[arr[i]] = hsh[arr[i]] ? 0 : !0;
}
for (var o in hsh) hsh[o]&&rel.push(o);
return rel
}var x = [1, 2, 3, 4, 5, 6]; // 原数组
var y = [1, 2, 3, 4]; // 原数组随意去掉元素后alert(x.differenc(y)) // 你去掉的元素
</script>
首先js的sort函数效率不低了。
其次用js如果对性能瓶颈要求这么高的话,可能需要考虑下转到后台去做这个事了
var n = 100; // 最大数
var l = [1, 2, 3, .... 4]; // 无序的被抽取的数组
var s = 0;
for (var i = 0; i < l.lenght; i++) {
s += l[i];
}
alert((n + 1) / 2 * n - s); // 输出结果
大叔
lenght => length
没测试吧
var arr1 = [1, 6, 9, 4, 5, 2, 8, 3, 10];alert(eval(arr0.join("+")) - eval(arr1.join("+")))
我感到疑虑的是LZ所云:“一个连续元素的乱序数组”。“连续元素”是单指连续的数字(1、2、3 ...),还是包括连续的字母(a、b、c ...)?