1、有数组[3,7,9,1,4,2,8] 数字无顺序,不重复,要找出其中连续自然数得最大集合的大小,比如这个数组的最大集合为[1,2,3,4],大小为4。用程序实现上述功能。
2、有两个字符串数组,判断两个数组在不考虑顺序的情况下是否相等,数组中的元素有可能重复,比如["bbb","aaa","ddd","aaa"]和["aaa","ddd","aaa","bbb"]相等
["bbb","aaa","ddd"]和["bbb","aaa"]不相等。实现上述功能。
2、有两个字符串数组,判断两个数组在不考虑顺序的情况下是否相等,数组中的元素有可能重复,比如["bbb","aaa","ddd","aaa"]和["aaa","ddd","aaa","bbb"]相等
["bbb","aaa","ddd"]和["bbb","aaa"]不相等。实现上述功能。
var arr=[1,8,9,2,3];
arr.sort(Array.NUM)
var tempArr=[];
var tempArr2=[];
for(var i=0;i<arr.length;i++){
var v=arr[i];
if(tempArr.length==0){tempArr.push(v)}
else if(tempArr[tempArr.length-1]+1=v){tempArr.push(v)}
else if(tempArr2.length<tempArr.length){tempArr2=tempArr;tempArr=[]}
else{tempArr=[]}
}
trace(tempArr2)
}
arr.sort(Array.NUM)
var tempArr=[];
var tempArr2=[];
for(var i=0;i<arr.length;i++){
var v=arr[i];
if(tempArr.length==0){tempArr.push(v)}
else if(tempArr[tempArr.length-1]+1=v){tempArr.push(v)}
else if(tempArr2.length<tempArr.length){tempArr2=tempArr;tempArr=[]}
else{tempArr=[]}
}
trace(tempArr2)
}
var arr1=["bbb","aaa","ddd","aaa"];
var arr2=["bbb","aaa","ddd","aaa"];
arr1.sort();
arr2.sort();
if(arr1.length!=arr2.length){retrun false}
else{
for(var i=0;i<arr1.length;i++){if(arr1[i]!=arr2[i])retrun false}
}
retrun true
var arr2=["bbb","aaa","ddd","aaa"];
arr1.sort();
arr2.sort();
if(arr1.length!=arr2.length){retrun false}
else{
for(var i=0;i<arr1.length;i++){if(arr1[i]!=arr2[i])retrun false}
}
retrun true
抛开两处语法错误以外,这个算法也是错的,假设是连续数组[1,2,3,4,5,6], 就不会执行到这条else if (tempArr2.length<tempArr.length),而是会执行这条判断else if (tempArr[tempArr.length-1]+1==v),tempArr2永远是空;还有断节的时候,把tempArr置空后应该把这个断节的数存进去
稍微改了下,不知道有没有BUG
稍微改了下,不知道有没有BUG
- var array:Array = [1,2,3,4,5,6,11,12,13,21,22,23,24,25,26,27];
- trace(test(array))
- function test(arr:Array):int{
- arr.sort(Array.NUMERIC);
- var arr1:Array = [];
- var arr2:Array = [];
- for(var i:int = 0; i < arr.length; i++){
- var v:int = arr[i];
- if(arr1.length == 0) {
- arr1.push(v);
- }
- else if(arr1[arr1.length - 1] + 1 == v) {
- arr1.push(v);
-
- // 如果是连续数组,则直接返回他的长度
- // 如果已经检测到了最后个数字,则判断临时数组arr1和之前存放的数组arr2的长度大小
- if(arr1.length == arr.length || (i == arr.length - 1 && arr1.length > arr2.length)){
- return arr1.length;
- }
- }
- else if(arr2.length < arr1.length){
- arr2 = arr1;
- arr1 = [];
- arr1.push(v); // 记得要把断节的数存进去
- }else{
- arr1 = [];
- arr1.push(v); // 记得要把断节的数存进去
- }
- }
- return arr2.length;
- }
//1
- var list:Array = [3,7,9,1,4,2,8];
- function getMaxLen(arr:Array):int{
-
- arr.sort(16)
- var map:Object = {}
- var tmp:Array = [];
- var max:int =0;
- for each(var num in arr){
-
- if(tmp.length>0){
-
- if(num-tmp[tmp.length-1]==1){
-
- tmp.push(num)
-
- if(tmp.length>max) map[max = tmp.length] = tmp.slice(0);
- }else{
-
- tmp=[num];
- }
-
- }else{
- map[++max] = (tmp=[num]).slice(0)
- }
- }
- return max;
- }
- trace(getMaxLen(list))
//2
- var arr1:Array =["bbb","aaa","ddd","aaa"];
- var arr2:Array =["aaa","ddd","aaa","bbb"];
- function equal(a:Array,b:Array):Boolean{
- a.sort();
- b.sort();
- return a.join("|") == b.join("|")
-
- }
- trace(equal(arr1,arr2))
最好不要在中途 push,直接取出l1,l2,最后slice得到数组为好
第二题
我先想的
排序后
arr1.toString()==arr2.toString()
不过还是用sliz的为好,免得合并后的数组一样但是元素不一样,如
"a","b","c"
"a","bc"
楼上的join同样会有这样的问题
或者可以用
ba1=new ByteArray()
ba1.writeObject(arr1)
ba2=new ByteArray()
ba2.writeObject(arr2)
return ba1.toString()==ba2.toString()