`

求解两道算法题

阅读更多

http://bbs.9ria.com/viewthread.php?tid=81351&extra=page%3D2%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

 
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"]不相等。实现上述功能。
 
 
 
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)
}
 
 
 
 
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
 
 
 
抛开两处语法错误以外,这个算法也是错的,假设是连续数组[1,2,3,4,5,6], 就不会执行到这条else if (tempArr2.length<tempArr.length),而是会执行这条判断else if (tempArr[tempArr.length-1]+1==v),tempArr2永远是空;还有断节的时候,把tempArr置空后应该把这个断节的数存进去

稍微改了下,不知道有没有BUG
  1. var array:Array = [1,2,3,4,5,6,11,12,13,21,22,23,24,25,26,27];
  2. trace(test(array))

  3. function test(arr:Array):int{
  4.         arr.sort(Array.NUMERIC);
  5.         var arr1:Array = [];
  6.         var arr2:Array = [];
  7.         for(var i:int = 0; i < arr.length; i++){
  8.                 var v:int = arr[i];
  9.                 if(arr1.length == 0) {
  10.                         arr1.push(v);
  11.                 }
  12.                 else if(arr1[arr1.length - 1] + 1 == v) {
  13.                         arr1.push(v);
  14.                         
  15.                         // 如果是连续数组,则直接返回他的长度
  16.                         // 如果已经检测到了最后个数字,则判断临时数组arr1和之前存放的数组arr2的长度大小
  17.                         if(arr1.length == arr.length || (i == arr.length - 1 && arr1.length > arr2.length)){
  18.                                 return arr1.length;
  19.                         }
  20.                 }
  21.                 else if(arr2.length < arr1.length){
  22.                         arr2 = arr1;
  23.                         arr1 = [];
  24.                         arr1.push(v);  // 记得要把断节的数存进去
  25.                 }else{
  26.                         arr1 = [];
  27.                         arr1.push(v);  // 记得要把断节的数存进去
  28.                 }
  29.         }
  30.         return arr2.length;
  31. }
复制代码
 
 
 
 
 
//1
  1. var list:Array = [3,7,9,1,4,2,8];

  2. function getMaxLen(arr:Array):int{
  3.         
  4.         arr.sort(16)

  5.         var map:Object = {}

  6.         var tmp:Array = [];

  7.         var max:int =0;

  8.         for each(var num in arr){

  9.         
  10.                 if(tmp.length>0){
  11.                 
  12.                         if(num-tmp[tmp.length-1]==1){
  13.                         
  14.                                 tmp.push(num)
  15.                         
  16.                                 if(tmp.length>max) map[max = tmp.length] = tmp.slice(0);
  17.                         }else{
  18.                         
  19.                                 tmp=[num];
  20.                         }
  21.                 
  22.                 }else{

  23.                         map[++max] = (tmp=[num]).slice(0)
  24.                 }
  25.         }
  26.         return max;

  27. }

  28. trace(getMaxLen(list))
复制代码
//2
  1. var arr1:Array =["bbb","aaa","ddd","aaa"];
  2. var arr2:Array =["aaa","ddd","aaa","bbb"];

  3. function equal(a:Array,b:Array):Boolean{
  4.         a.sort();
  5.         b.sort();
  6.         return a.join("|") == b.join("|")
  7.         
  8. }

  9. 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()
分享到:
评论

相关推荐

    求解两物种小系统发育问题的遗传算法题

    本文研究了基于复制丢失(Duplication Loss, DL)问题的两物种小系统发育问题(2-Species Phylogeny Problem, 简称 2SP-DL问题),并提出了一种新的遗传算法G2SP算法来求解。 G2SP算法结合了普通算子和智能算子,...

    ACM算法题100题-经典算法库

    根据给定文件的信息,我们可以提炼出与ACM算法题及经典算法库相关的多个知识点。以下是对这些知识点的详细解析: ### ACM国际大学生软件大赛简介 ACM(Association for Computing Machinery)国际大学生软件大赛是...

    几道算法选择题 几道算法选择题

    * 判定问题难易处理的标准是:可以由多项式时间算法求解的问题是易处理的,而需要超过多项式时间算法求解的问题是难处理的。 七、函数的阶 * 设 f(N)、g(N)是定义在正数集上的正函数,如果存在正的常数 C 和...

    76经典道算法题及解答

    《76经典道算法题及解答》是一份珍贵的资源,涵盖了编程领域中76个经典的算法题目及其详细的解决方案。这些题目旨在帮助程序员提升算法思维、优化问题解决能力,并为面试准备提供实战素材。标签“算法”和“解答”...

    java经典算法题

    Java经典算法题是程序员在开发过程中常常需要面对的挑战,它们可以帮助我们提升编程思维,优化问题解决能力,尤其是在处理复杂数据结构和高效计算时显得尤为重要。这个压缩包中包含了一份名为"JAVA经典算法40题.doc...

    常见面试算法题

    "常见面试算法题"这一主题涵盖了编程面试的核心部分,旨在帮助求职者准备这些关键的挑战。下面将详细讨论相关知识点。 1. **算法基础**:算法是解决问题的步骤集合,面试中常见的包括排序算法(如冒泡、选择、插入...

    面试常见算法题

    在IT行业的面试中,算法题是衡量候选人技术实力的重要标准之一。这些题目通常涉及数据结构、排序、查找、图论等多个领域,旨在测试应聘者的逻辑思维能力、问题解决能力和编程技巧。以下是一些常见的面试算法题及其...

    java的2道算法题,笔试面试题

    标题中的两道算法题目是Java面试中常见的类型,它们分别涉及到数组操作和图的最短路径问题,这对于应届毕业生在IT公司的招聘过程中非常重要。以下是这两道题目的详细解析及解决方案。 第一题:寻找两个有序数组的...

    程序员面试经典算法题

    《程序员面试经典算法题》是针对程序员在面试过程中可能会遇到的算法问题进行深入解析的一份资源。这份资料旨在帮助程序员提升算法思维,从而在技术面试中脱颖而出。通过学习和掌握这些经典算法,不仅可以提高编程...

    算法习题答案,PDF显示

    10. **概率和随机化算法**:如Monte Carlo方法和Las Vegas算法,用于解决难以精确求解的问题,如近似算法。 这份PDF文档是英文版,意味着读者需要具备一定的英文阅读能力,但同时也提供了接触原汁原味的学术资料的...

    基于Dijkstra算法的最短路径问题求解.123

    ### 基于Dijkstra算法的最短路径问题求解 #### 一、Dijkstra算法简介 Dijkstra算法是由荷兰计算机科学家Edsger W. Dijkstra于1956年提出的一种用于解决加权图中单源最短路径问题的算法。该算法能够有效地找出从...

    B题附件数据(4.24附件).rar_B题_gentlex3u_non dominant_遗传 模型求解_遗传算法

    本资料"gentlex3u_non dominant_遗传模型求解_遗传算法"主要探讨了如何运用这两种算法来求解特定的遗传模型。 遗传算法源于生物进化论中的自然选择和遗传机制,通过模拟种群的进化过程来寻找最优解。其基本步骤包括...

    程序员的算法趣题.pdf.zip

    《程序员的算法趣题》是一本专门为IT从业者和有志于进入这个领域的学习者准备的算法书籍。它通过一系列有趣且富有挑战性的题目,旨在帮助读者深入理解和掌握计算机科学中的核心算法,提升解决实际问题的能力。这本书...

    蓝桥杯18年最全算法训练试题181道(含vip试题)

    构造最小生成树可以使用Kruskal算法或Prim算法,本题中可能需要结合贪心思想来优化路径选择,确保访问每个牧场的总时间最少。 7. 逆序对(ALGO-7) 逆序对的计算是排序算法中的一个重要概念,它表示在一个序列中,...

    iOS 面试必看算法题

    这份"iOS面试必看算法题"集合,旨在帮助你全面了解并掌握iOS面试中可能出现的算法问题,助你顺利通过BATJ(百度、阿里巴巴、腾讯、京东)等大厂的面试。 首先,我们要理解算法是什么。算法是一系列解决问题的清晰...

    面试高频算法习题精讲.rar

    6. 图论算法:包括深度优先搜索(DFS)和广度优先搜索(BFS),以及Dijkstra算法、Floyd-Warshall算法等用于求解最短路径问题。图论在解决实际问题中广泛应用,如网络设计、物流优化等。 7. 树结构与二叉树:二叉...

    程序员算法趣题——随书源码

    《程序员算法趣题——随书源码》是一个与算法相关的学习资源,包含了增井敏克著作《程序员算法趣题》中的实例代码。增井敏克是算法领域知名的专家,他的书籍通常深入浅出,旨在帮助程序员提升算法思维和解决实际问题...

    javaSE基础算法题

    "JavaSE基础算法题"这个主题涵盖了在Java标准版环境(Java SE)中解决算法问题的基础知识。这些题目通常涉及到数据结构、排序、搜索、图论等多个方面,旨在提升开发者解决问题的能力和程序设计的效率。 一、数据...

    遗传算法求解一般函数极值问题_遗传算法_遗传算法求解一般函数极值问题_

    遗传算法求解一般函数极值问题

    cpp数据结构与算法习题

    本项目“cpp数据结构与算法习题”聚焦于四个核心主题:二进制大数、双向十字链表、SAT问题求解以及递归迷宫路径。以下是关于这些主题的详细讲解。 1. **二进制大数(Binary)** 在计算机科学中,处理大整数是常见...

Global site tag (gtag.js) - Google Analytics