每天一篇面试题(四)

来源:互联网 发布: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
原创粉丝点击