js刷林扣 lintcode(2017年1月)

题目前的数字是对应的lintcode的题目序号

14.二分查找

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。

样例
在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。

        function binarySearch(arr,num,start,end){
            if(!arr.length) return 'no data'
            if(arr.length==1&&arr[0]==num) return 0
            if(num<arr[0]||num>arr[arr.length-1]) return 'not found'
            var end=end||arr.length-1,
                start=start||0,
                m=Math.floor((end+start)/2)
                if(arr[m]==num&&arr[m]!=arr[m-1]) return m
                if(arr[m]<num){
                    return binarySearch(arr,num,m+1,end)
                }else{
                    return binarySearch(arr,num,start,m-1)

                }
                return 'not found'

        }
    console.log(binarySearch([1,2,3,3,4,5,10],3))

22.平面列表(01-06)

给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。

样例
给定 [1,2,[1,2]],返回 [1,2,1,2]。

给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。

        var list=[1,2,[3,4,[5,6],7],8]
        var result=[]
        function fuc(list){
            for(var i=0;i<list.length;i++){
                if(list[i][0]){
                    var arr=list[i]
                     fuc(arr)
                }else{
                    result.push(list[i])
                }
            }
        }
        fuc(list)
        console.log(result)

28.搜索二维矩阵(01-07)

写出一个高效的算法来搜索 m × n矩阵中的值。

这个矩阵具有以下特性:

每行中的整数从左到右是排序的。
每行的第一个数大于上一行的最后一个整数。

样例
考虑下列矩阵:

[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给出 target = 3,返回 true

function searchMatrix(matrix,target){
            var result=false
            if(target<matrix[0][0]||target>matrix[matrix.length-1][matrix[matrix.length-1].length-1]) return result
            for(var i=0;i<matrix.length;i++){
                if(target>matrix[i][0]&&target<matrix[i+1][0]){
                    var arr=matrix[i]
                    arr.forEach(function(a){
                        if(a==target){result=true}
                    })
                }
            }
            return result
        }

插入区间(01-08)

给出一个无重叠的按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

样例

插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。

插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。

        function insertDistance(matrix,target){
            for(var i=0;i<matrix.length-1;i++){
                if((target[0]>=matrix[i][0])&&(target[1]<=matrix[i+1][1])){
                    debugger
                    if(target[0]==matrix[i][1]&&target[1]==matrix[i+1][1]){
                        matrix[i][1]=matrix[i+1][1]
                        delete(matrix[i+1])
                    }else if(target[0]==matrix[i][0]&&target[1]==matrix[i+1][1]){
                        matrix[i]=target
                        delete(matrix[i+1])
                    }else{
                        matrix.splice(i+1,0,target)
                    }
                    
                }
            }
        }

39.恢复旋转排序数组(01-09)

给定一个旋转排序数组,在原地恢复其排序。

比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]

function recoverRotatedSortedArray(arr) {
    var len=arr.length
    if(len<1) return '数组为空'
    if(arr[0]<arr[len-1]||len==1) return arr
    if(arr[0]>arr[len-1]||(arr[0]==arr[len-1]&&len>1)){
        var temp=arr[0]
        for(var i=0;i<len;i++){
            arr[i]=arr[i+1]
        }
        arr[len-1]=temp
        return recoverRotatedSortedArray(arr)
    }
}

41.最大子数组(01-10)

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。

注意事项 子数组最少包含一个数

样例
给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6

function maxSubArray(arr) {
    var max=0
    var sum=0
    var maxNum=0//数组中最大数
    var fushu=0
    for(var i=0;i<arr.length;i++){      

        if(a[i]<0){
            fushu++
        }
        if(maxNum<arr[i]){
            maxNum=arr[i]
        }
        sum+=arr[i]
        if(sum>max){
            max=sum
        }else if(sum<0){
            sum=0
        }
    }
        if(fushu==arr.length){//全为负数的情况,就选一个最大值
            arr.sort()
            max=arr[0]
        }
    
        return max
}

42.最小子数组(01-11)

给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
样例
给出数组[1, -1, -2, 1],返回 -3

function minSubArray(arr) {
    var min=0
    var sum=0
    var minNum=0
    var zhengshu=0
    for(var i=0;i<arr.length;i++){      

        if(a[i]>0){
            zhengshu++
        }
        if(minNum>arr[i]){
            minNum=arr[i]
        }
        sum+=arr[i]
        if(sum<min){
            min=sum
        }else if(sum>0){
            sum=0
        }
    }
        if(zhengshu==arr.length){
            arr.sort()
            min=arr[arr.length-1]
        }
    
        return min
}

46.主元素【01-12】

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

样例

给出数组[1,1,1,1,2,2,2],返回 1

挑战

要求时间复杂度为O(n),空间复杂度为O(1)

function majorityNumber(arr) {
    var halfLen=arr.length/2
    arr.sort()
for(var i= 0;i<arr.length;i++){
    if(i<halfLen){
        if (arr[i]==arr[Math.floor(halfLen)]) {
            return arr[i]
        }
}
}
return '没有主元素'
}

50.数组剔除元素后的乘积【01-16】

给定一个整数数组A。

定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。

样例
给出A=[1, 2, 3],返回 B为[6, 3, 2]

function productExcludeItself(arr) {
    var arrB=[]
    for(var i=0,len=arr.length;i<len;i++){
        var sum=1
        var left=1,right=1
        for(var j=0;j<i;j++){
            left*=arr[j]
        }
        for(var k=i+1;k<len;k++){
            right*=arr[k]
        }
        sum=left*right
        arrB.push(sum)
    }
    return arrB
}

53. 翻转字符串【01-18】

给定一个字符串,逐个翻转字符串中的每个单词。

单词的构成:无空格字母构成一个单词

输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
样例:
给出s = "the sky is blue",返回"blue is sky the"

//使用现有方法实现
function reverseWords(str){
var arr=str.split(' ').reverse()
return arr.join(' ')
}

55.比较字符串【01-19】

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母
样例
给出 A = "ABCD" B = "ACD",返回 true

给出 A = "ABCD" B = "AABC", 返回 false

function compareStrings(str1,str2,pos){
    if(!str1||!str2||pos>str2.length) return false
    if(str1==str2||pos==str2.length) return true
    var target=str2.charAt(pos)
    var len1=str1.split(target).length
    var len2=str2.split(target).length
    if(len1>=len2){
        pos++
        return compareStrings(str1,str2,pos++)
    }
    return false
}

60.搜索插入位置 【01-20】 今天是偶滴生日~~~吼吼吼

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。

你可以假设在数组中无重复元素。
样例
[1,3,5,6],5 → 2

[1,3,5,6],2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6],0 → 0

function searchInsert(arr,index){
    var res = arr.indexOf(index)
if(res<0){
    arr.push(index)
    arr.sort()
    return arr.indexOf(index)
}else
    return res
}

64.合并排序数组 II【01-22】

合并两个排序的整数数组A和B变成一个新的数组。
样例
给出 A = [1, 2, 3, empty, empty], B = [4, 5]
合并之后 A 将变成 [1,2,3,4,5]

function mergeSortedArray(arr1,arr2){
    arr2.forEach(function(a2){
        arr1.push(a2)
    })
    return arr1.sort()
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 3.10 69.给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 二叉树的层次遍历样例给一棵二叉树 {3...
    mytac阅读 1,036评论 3 3
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,152评论 0 4
  • 最近在写个性化推荐的论文,经常用到Python来处理数据,被pandas和numpy中的数据选取和索引问题绕的比较...
    shuhanrainbow阅读 4,454评论 6 19
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,507评论 6 13
  • 前日,和舅舅一家出去玩儿,在一路口看到几个骑行者举着牌子求助,牌上的内容大概是这样的:“希望好心人能够支援,给...
    咩咩YYY阅读 181评论 0 0