查找一个数字数组中,是否有两个数相加的和与数组中某一个数字相等。例:arr[i]+arr[j]=arr[k]

缪金谷 509 0

数组中,是否有两个数相加的和与数组中某一个数字相等。例:arr[i]+arr[j]=arr[k]

查找一个数字数组中,是否有两个数相加的和与数组中某一个数字相等。例:arr[i]+arr[j]=arr[k]

在群里看到有小伙伴提到一个算法题,已知一个数组arr,想要在数组内查看是否有两个数字相加的和与数组中的某一个数字相等

自己写了两种算法可以获取题目中的答案,复杂度为O(n^3),代码如下:

<!DOCTYPE html>  
<html lang="en">    
   <head>      
       <meta charset="UTF-8">      
       <meta name="viewport" content="width=device-width, initial-scale=1.0">      
       <meta http-equiv="X-UA-Compatible" content="ie=edge">      
       <title>js算法题解</title>      
       <script src="http://www.tachmiao.com/chanke/jquery.js"></script>  
   </head>    
   <body>      
       <p>
           输入想要查找的数字,以英文‘,’分开,例:48, 5, 4, 8, 3, 6, 8, 4, 2, 8, 6, 3, 2, 1
       </p>      
       <input class="arr-num" type="text">      
       <p>
           方法1通过先将所有的数字相加,得到新的数组,然后在新数组内查找是否与原数组中某个数相等
       </p>      
       <p>
           <button class="test-one">方法1</button>总次数:
           <input class="show-one-sum" type="text">
           找到时使用次数:
           <input class="show-one-num" type="text">
       </p>      
       <p>
           方法2遍历将数字相加,每得到一个和就先遍历一遍原数组是否有与之相等的值
       </p>      
       <p>
           <button class="test-two">方法2</button>总次数:
           <input class="show-two-sum" type="text">
           找到时使用次数:
           <input class="show-two-num" type="text">
       </p>      
       <script>          
           //方法1          
           $(".test-one").click(function () {              
               var arr = ston($(".arr-num").val()),                  
                   arrSum = [],                  
                   stop = false,                  
                   testOneSum = 0,                  
                   testOneNum = 0;              
               $.each(arr, function (index, item) {                  
                   $.each(arr, function (i, ele) {                      
                       if (i != index) {                          
                           arrSum.push(item + ele);                      
                       };                      
                       testOneNum++;                      
                       testOneSum++;                  
                   });                
               })              
               $.each(arr, function (index, item) {                  
                   $.each(arrSum, function (i, ele) {                      
                       if (ele == item) {                          
                           stop = !stop;                      
                       };                      
                       if (!stop) {                          
                           testOneNum++;                      
                       };                      
                       testOneSum++;                  
                   });              
               });              
               $(".show-one-sum").val(testOneSum);              
               $(".show-one-num").val(testOneNum);          
           });          
           //方法2          
           $(".test-two").click(function () {              
               var arr = ston($(".arr-num").val()),                  
                   testTwoNum = 0,                  
                   stop = false,                  
                   testTwoSum = 0;              
               $.each(arr, function (index, item) {                  
                   $.each(arr, function (i, ele) {                      
                       if (i != index) {                          
                           var num = item + ele;                          
                           $.each(arr, function (j, e) {                              
                               if (e == num) {                                  
                                   stop = !stop;                              
                               };                              
                               if (!stop) {                                
                                   testTwoNum++;                              
                               };                              
                               testTwoSum++;                          
                           });                          
                           testTwoSum++;                      
                       } else {                          
                           testTwoNum++;                          
                           testTwoSum++;                      
                       };                  
                   });                
               });              
               $(".show-two-sum").val(testTwoSum);              
               $(".show-two-num").val(testTwoNum);          
           })          
           //将数字字符串转换为数字数组          
           function ston(str) {              
               var arr = str.split(",").map(function (item, index, array) {
                   return Number(item);              
               });              
               return arr;          
           };      
       </script>  
   </body>    
</html>

有不同方法的小伙伴可以留言哦~~~


标签: JavaScript js算法

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~