• leetcode记录(一)


    这里应该会长期记录,主要记录自己刷leetocde的过程,尽量保证遇到的题目自己都会和懂,语言用Java和JavaScript。
    从最简单的题目开始,尽量保证都每道题都会,并且一定要分类

    数组

    1、求两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    你可以按任意顺序返回答案。

    解答
    通过两个for循环嵌套,第一个是遍历得到for循环的值,第二个比较是否和第一个减去的值相等
    比较简单

    let twoSum= (nums,target)=> {
        for (let i = 0; i < nums.length; i++) {
                let rest =target-nums[i]
                for (let j = i+1; j < nums.length; j++) {
                    if (rest===nums[j]) {
                        return [i, j]
                    }
                }
                     
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    链表

    2. 两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 链表的特点是,通过 **节点**来相互连接,上一个节点的指针指向下一个节点,下一个节点的指针指向下下个节点。双向链表也就是两个指针指向不同的方向

    通过链表,让他们全部都指向第一个,接下来每一个相互相加

    重点理解:
    t通过逆序相加的方式,如果满10则进1,GitHub模拟的是链表,因此每个都有value

    let addTwoNumbers = function (l1, l2) {
        const dummy = new ListNode(null)
        let cur = dummy;
        let carry = 0;
        while (l1 || l2) {
            // 判定一下l1和l2值是否存在
            const val1 = l1 ? l1.val : 0
            const val2 = l2 ? l2.val : 0
            let answer = val1 + val2 + carry;
            carry = answer > 9 ? 1 : 0
            cur.next = new ListNode(answer % 10)
            if (l1) l1 = l1.next;
            if (l2) l2 = l2.next;
            cur = cur.next;
        }
        if(carry===1) cur.next = new ListNode(1)
        return dummy.next;
    
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    3.无重复字符的最长子串

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。·
    哈希表和移动窗口算法(求一段字符串中无重复时经常用到)

    每次右边的指针都需要比较有没有重复,如果有,则将左指针移到新的位置,另外通过max方法来更新重复的位置,如果重复的在之前,则提到新的位置。
    如果没有,则通过right-left+1(左指针是从0开始,所以左和右指针之间的距离+1才是整个长度)来和之前的长度比较,如果相等,才是结果

    let lengthOfLongestSubstring = function (s) {
    
    
    // 通过hasp表来存放s字符串中每个ASCII码出现的下标位置,一开始先设置为空,即没有ASCII码在
    // 每次右窗口移动时,都要比较窗口的长度和检查有没有重复的字符出现,没有就添加到哈希表
    // 3 通过右指针表示右窗口,先往有移动,如果当前右窗口的边界指向的字符在哈希表里面,那么说明同一个字符重复出现了,取当
    // 前找到该字符的最后一个位置作为新的左窗口的一个边界
    let map = new Map(),
    left = 0,
     result = 0;
    for (let right = 0; right < s.length; right++) {
      if (map.has(s[right])) {
        // 记录当前的左指针,如果右边的数在左指针之前,则依旧取当前的指针
        left = Math.max(map.get(s[right]),left)
      }
    //   记录当前记录的时间点,如果记录的没超过,之前的仍然是最大的
      result =Math.max(result,right-left+1);
      map.set(s[right],right+1)
    }
    console.log(result);
    return result
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    springboot项目需要的依赖
    Spring Cloud 整合 Nacos 详解
    K8S云计算系列-(2)
    华为云云耀云服务器L实例评测|在云耀云服务器L实例上部署经典小游戏battle-city坦克大战
    【大数据】Flink SQL 语法篇(八):集合、Order By、Limit、TopN
    jmeter+influxdb+grafana实时监控平台详细教程
    前后端协议后端统一返回格式Result
    ARM-A架构入门基础(二)异常处理
    【力扣-1337打卡】
    『Halcon与C#混合编程』002_读取图像、显示图像
  • 原文地址:https://blog.csdn.net/weixin_45953482/article/details/126374762