日常刷题0x25之未出新手村

250 阅读1分钟

如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的

题号:80
var removeDuplicates = function (nums) {
     if (nums.length < 3) {
         return nums.length
     }
    //从第三个开始
    //pre指向的位置就是后面cur找到的一个符合题意要保留下来的数字将要挪动到的位置
    //cur是为了找到需要保留的数字的位置(规则是:pre所指的位置倒退2个的位置和cur的位置
    //是否相同,相同就不能保留cur的位置的数字,如果保留了挪到pre指向的位置之后就会出现
    //连续3个相同的数字,不符合题意,题意需要最多连续2个相同的数字)
    let pre = 2, cur = 2
    while (cur < nums.length) {
        if (nums[cur] != nums[pre - 2]) {
            nums[pre] = nums[cur]
            pre++
        }
        cur ++
    }
    return pre
};
题号:26
//fast找到一个符合题意的数字然后移动到slow的位置,移动之后要保证
//slow位置的数字和slow-1处的位置不同才能符合题意
var removeDuplicates = function (nums) {
    if (nums < 2) {
        return nums.length
    }
    let slow = 1, fast = 1
    while (fast < nums.length) {
        if (nums[fast] != nums[slow - 1]) {
            nums[slow] = nums[fast]
            slow++
        }
        fast++
    }
    return slow
};
题号:1143
var longestCommonSubsequence = function (text1, text2) {
    let dptable = new Array(text1.length + 1)
    for (let i = 0; i <= text1.length; i++) {
        let arr = new Array(text2.length + 1)
        dptable[i] = arr
    }
    for (let i = 0; i < dptable.length; i++) {
        for (let j = 0; j < dptable[0].length; j++) {
            if (i == 0 || j == 0) {
                dptable[i][j] = 0
            } else {
                //动态转移方程
                if (text1[i - 1] == text2[j - 1]) {
                    dptable[i][j] = dptable[i - 1][j - 1] + 1
                } else {
                    dptable[i][j] = Math.max(dptable[i][j - 1], dptable[i - 1][j])
                }
            }
        }
    }
    return dptable[text1.length][text2.length]
};