首页 > 其他分享 >leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]

leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]

时间:2023-01-17 21:11:21浏览次数:38  
标签:202 return ++ strArr 392 length let var 917

[toc

88. 合并两个有序数组

var merge = function(nums1, m, nums2, n) {
    let A1 = nums1.slice(0, m)
    let A2 = nums2
    // 追加哨兵
    A1.push(Number.MAX_SAFE_INTEGER)
    A2.push(Number.MAX_SAFE_INTEGER)
    for (let k = 0, i = 0, j = 0; k < m + n; k++) {
        // 循环不变式
        //  k: 下一个写入位置
        //  i: A1中获回写位置
        //  j: A2中回写位置
        nums1[k] = A1[i] < A2[j] ? A1[i++] : A2[j++]
    }
};

202. 快乐数

var isHappy = function(n) {
    const squareSum = (n) => {
        let sum = 0
        while (n > 0) {
            let digit = n % 10
            sum += digit * digit
            n = Math.floor(n / 10)
        }
        return sum
    }
    // 判断是否有循环可以使用快慢指针,表示链表中有环
    let slow = n
    let fast = squareSum(n)

    while (slow != fast) {
        slow = squareSum(slow)
        fast = squareSum(squareSum(fast))
    }
    return slow === 1
};

345. 反转字符串中的元音字母

var reverseVowels = function(s) {
    let set = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
    let arr = s.split('')
    let i = 0,
        j = s.length - 1
    while (i < j) {
        if (set.has(arr[i])) {
            if (set.has(arr[j])) {
                [arr[i], arr[j]] = [arr[j], arr[i]]
                i++
            }
            j--
        } else {
            i++
        }
    }
    return arr.join('')
};

392. 判断子序列

var isSubsequence = function(s, t) {
    if (s == '') return true

    let i = 0;
    let j = 0
    while (j < t.length) {
        if (s[i] === t[j]) {
            i++
        }
        if (i == s.length) {
            return true
        }
        j++
    }
    return false
};

455. 分发饼干

var findContentChildren = function(g, s) {
    let ng = g.sort((a, b) => a - b)
    let ns = s.sort((a, b) => a - b)
    let [i, j] = [0, 0]
    while (i < ng.length && j < ns.length) {
        if (ng[i] <= ns[j]) {
            i++
        }
        j++ // 饼干被消费或不满足,需递增
    }
    return i
};

905. 按奇偶排序数组

var sortArrayByParity = function(nums) {
    let i = 0;
    let j = nums.length - 1
    while (i <= j) {
        if (nums[j] % 2 == 0 && nums[i] % 2 != 0) { // 偶前奇后
            [nums[i], nums[j]] = [nums[j], nums[i]]
            i++
            j--
        } else if (nums[j] % 2 == 0) {
            i++
        } else if (nums[i] % 2 != 0) {
            j--
        } else {
            i++
            j--
        }
    }
    return nums
};

922. 按奇偶排序数组 II

var sortArrayByParityII = function(nums) {
    let j = 1;
    let o = 0
    let res = []
    nums.forEach(n => {
        if (n % 2 == 0) {
            res[o] = n
            o += 2
        } else {
            res[j] = n
            j += 2
        }
    })
    return res
};

917. 仅仅反转字母

var reverseOnlyLetters = function(s) {
    let reg = /[a-zA-Z]/
    let strArr = s.split('')
    let i = 0
    let j = strArr.length - 1
    while (i < j) {
        if (reg.test(strArr[i]) && reg.test(strArr[j])) {
            [strArr[i], strArr[j]] = [strArr[j], strArr[i]]
            i++
            j--
        } else if (reg.test(strArr[i])) {
            j--
        } else if (reg.test(strArr[j])) {
            i++
        } else {
            i++
            j--
        }
        console.log(strArr);
    }
    return strArr.join('')
};

925. 长按键入

var isLongPressedName = function(name, typed) {
    let i = 0
    let j = 0
    while (j < typed.length) {
        if (name[i] == typed[j]) {
            i++
        }
        if (name[i] != typed[j] && name[i - 1] != typed[j]) {
            return false
        }
        if (i == name.length) {
            let flag = typed.slice(j).split(name[name.length - 1]).join('')
            if (flag != '') {
                return false
            }
            return true
        }
        j++
    }
    return false
};

942. 增减字符串匹配

var diStringMatch = function(s) {
    let m = 0
    let n = s.length
    let res = []
    for (let i = 0; i <= s.length; i++) {
        if (s[i] == 'I') {
            res.push(m)
            m++
        } else {
            res.push(n)
            n--
        }
    }
    return res
};

标签:202,return,++,strArr,392,length,let,var,917
From: https://www.cnblogs.com/echoyya/p/17048091.html

相关文章

  • 代码随想录day06 |242.有效的字母异位词 ;349. 两个数组的交集;202. 快乐数 ;1. 两数之和
    关键内容:哈希表,三种哈希结构官方说法:哈希表是根据关键码的值而直接进行访问的数据结构。用途:一般哈希表都是用来快速判断一个元素是否出现集合里。哈希本质就是牺牲空间......
  • 2022年终总结----大学生技术自媒体成长之路
    前言:Hello大家好,我是Dream。还有不到两周就要过年了,自己也马上迈入了21岁,感慨时间飞快,从19岁开始做一名博主,到现在也已经整整两年了,超百万字的博客也记录着我两年的成长......
  • 2021 ICPC 沈阳 J Luggage Lock
    链接:vJudge题意:有一个4位数字的密码锁,一次操作你可以选择连续的若干位同时向上或向下旋转一位,现问你从一个状态变换到另一个状态的最少操作次数思路:化繁为简,首先可以......
  • 2023牛客寒假算法基础集训营1题解
    写在前面全文收集了部分学长以及我自己的代码,本蒟蒻第一次写博客,效果不好请见谅TwT原题链接:https://ac.nowcoder.com/acm/contest/46800#questionA:WorldFinal?WorldC......
  • WC 2023
    不搞事后诸葛亮,得一分有据少一分有理。CTT之后几乎没打过什么OI赛制的模拟赛,这导致我很担心打OI赛制的突发情况。开考后20min读了一遍所有题,没有令人感到很能做的......
  • 2021-01-17
    写点什么呢!今天上班的第四天,来的时候寻思着日记本带着不方便,就留在书架上了,啊!!我真的烦,刚想着写点什么,我妈又和我姐在群里吵起来了。哈哈哈!!!还得我出面解决纷争。两个人一点都......
  • 「WC2023」等风雪停下,等枯树生花。
    滴答滴答时间落在每个春夏虽不曾说话,我能听到它不再害怕,明天还会有所牵挂不会太复杂,用余生写一个回答之前报名过了,既然都报名了,去WC玩。都放开了,为啥不恢复线下......
  • 我的 2022
    我的2022因为去年给我排版排得太阴间了于是今年选择自己排(富文本好麻烦啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊一年过去,我的文学素养又下降了一大截这咋整成就在即将过......
  • java:日期转型将“2023-03-14 00:00:00“转为年月日
    java:日期转型将"2023-03-1400:00:00"转为年月日old="2023-03-1400:00:00"Datedate=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").parse(old);old=newSimpleDateForm......
  • 洛谷 P3392 涂国旗
    原题链接题解首先用一个二维数组记录每行中WBR的数量,用来提高查找速度其次就是用两层for循环进行区域划分,如下图所示然后对区域内的所需更改颜色进行统计,这里要注意......