每天一篇面试题(四)
来源:互联网 发布:linux下日志管理系统 编辑:程序博客网 时间:2024/05/19 13:16
从给定的无序、不重复的数组 A 中,取出 N 个数,使其相加和 为 M。
并给出算法的 时间/空间复杂度。
<!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>Document</title></head><body><script> var array = [1,5,7,9,2,6,3]; function arraySort() { this.quickSort = function() { quick(array, 0, array.length-1); }; var swap = function(array, i, j) { var temp = array[i]; array[i] = array[j]; array[j] = temp; }; var quick = function(array, left, right) { if(array.length > 1) { index = partition(array, left, right); if(left < index - 1) { quick(array, left, index-1); } if(right > index) { quick(array, index, right); } } }; var partition = function(array, left, right) { var i = left; var j = right; var pivot = array[Math.floor((left+right)/2)]; while(i <= j) { while(array[i] < pivot) { i++; } while(array[j] > pivot) { j--; } if(i <= j) { swap(array, i, j); i++; j--; } } return i; }; } var result = new Array(); var which = 0; var innerwhich = 0; function addNToM(array, n, m) { if(n!=2) { if(result[which]==undefined) { result[which] = new Array(); } result[which].push(array[0]); innerwhich++ n--; m = m - array[0]; array.splice(0, 1); addNToM(array, n, m); } else { find(array, n, m); which++;; } } function find(array, n, m) { var i = 0; var j = array.length-1; var sum; var temp; while(i < j) { sum = array[i] + array[j]; if(sum < m) { i++; } else if(sum > m) { j--; } else { if(result[which]==undefined) { result[which] = new Array(); } if(result[which][innerwhich]==undefined) { result[which][innerwhich] = new Array(); } result[which][innerwhich].push(array[i]); result[which][innerwhich].push(array[j]); innerwhich++; i++; j--; } } } var arrSort = new arraySort(); arrSort.quickSort(); addNToM(array, 2, 3); console.log(result);</script> </body></html>
0 0
- 每天一篇面试题(四)
- 每天一篇面试题(一)
- 每天一篇面试题(二)
- 每天一篇面试题(三)
- 每天一篇面试题(五)
- 每天一篇面试题(六)
- 每天一道面试题(四)
- 每天5道面试题(四)java基础
- 每天几道笔(面)试题
- 面试题(四)
- 每天看点面试题(三)
- 每天一道面试题(一)
- 每天一道面试题(二)
- 每天一道面试题(三)
- 每天一道面试题(六)
- 每天5道面试题(一)
- 每天10个面试题(day01)
- 每天10个面试题(day02)
- 美团外卖订单中心的演进
- 纯拓扑排序,稍加改良时间。
- javaclass文件打包成jar
- 《ACM程序设计》书中题目―N
- HTML5语义化标签
- 每天一篇面试题(四)
- 【普通莫队选讲】BZOJ2038 BZOJ3289 BZOJ3781
- 简单的win32应用程序:弹跳的小球(使用双缓冲)
- 交换瓶子
- TCP报文格式详解
- junit3和junit4的比较
- 初学C#,总结一下.sln和.csproj的区别
- VirtualBox虚拟vdi磁盘扩容 201
- 个人理解的SpringAOP事务管理