LeetCode Hot 100~Day1

news2024/11/20 20:41:47

目录

两数之和

两数相加

无重复字符的最长子串 

最长回文子串 

盛最多水的容器 

删除链表的倒数第n个节点 

合并两个有序链表 

有效的括号 


两数之和

题目链接:1.两数之和

 

示例 

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解题思路

利用hashmap将数组的值和下标以键值对的形式存储起来,遍历数组,边遍历边判断,一旦遇到符合题意的条件时,直接返回结果。每次判断map中是否存在键为target-nums[i]的键值对,如果有,则返回该键对应的值和当前的i;如果没有就将nums[i]和i存入map中。

具体代码

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target - nums[i])) {
                return new int[]{map.get(target - nums[i]), i};
            }
            map.put(nums[i], i);
        }
        return new int[0];
    }
}

两数相加

题目链接:2.两数相加

 

示例 

 

输入:l1 = [2,4,3], l2 = [5,6,4]

输出:[7,0,8]

说明:342 + 465 = 807.

解题思路 

该问题的核心是处理进位问题,首先定义一个进位值,每个位相加后更新进位值。同时遍历两个链表,依次相加其每一位,当有一个链表为空时,则只处理非空的链表和进位值即可

具体代码 

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode ret = new ListNode(0);
        ListNode cur = ret;
        int isAdd = 0;
        while (l1 != null && l2 != null) {
            int num = l1.val + l2.val + isAdd;
            isAdd = num / 10;
            num %= 10;
            cur.next = new ListNode(num);
            cur = cur.next;
            l1 = l1.next;
            l2 = l2.next;
        }
        ListNode l = l2 == null ? l1 : l2;
        while (l != null) {
            int num = l.val + isAdd;
            isAdd = num / 10;
            num %= 10;
            cur.next = new ListNode(num);
            cur = cur.next;
            l = l.next;
        }
        if (isAdd == 1) {
            cur.next = new ListNode(isAdd);
        }
        return ret.next;
    }
}

无重复字符的最长子串 

题目链接:3.无重复字符的最长子串

 示例

输入: s = "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

解题思路

利用滑动窗口的思想可以解决该问题,遍历字符串,如果窗口内未出现重复字符,则扩大窗口的大小,右边界一直右移,如果出现了重复字符,则缩小窗口的大小,左边界右移。使用HashSet来存储每个字符,如果出现了重复的,就将窗口左边界右移,边移动边更新最大值,最终即可得到结果

class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set<Character> set = new HashSet<>();
        int ret = 0;
        int r = -1;
        int n = s.length();
        for (int i = 0; i < n; i++) {
            if (i != 0) {
                set.remove(s.charAt(i - 1));
            }
            while (r + 1 < n && !set.contains(s.charAt(r + 1))) {
                set.add(s.charAt(r + 1));
                r++;
            }
            ret = Math.max(ret, r - i + 1);
        }
        return ret;
    }
}

最长回文子串 

题目链接:5.最长回文子串

 

示例

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

解题思路 

动态规划

    状态定义:f(i, j): 从i到j的字母是否为回文子串

    状态方程:f(i, j) = f(i+1, j-1) 且 (s(i) == s(j))

    初始化:f(i, i) = true f(i, i+1) = (s(i) == s(i+1))

    返回值:p(i, j) == ture中j-i+1最长的那个串

具体代码

class Solution {
    /**
    状态定义:f(i, j): 从i到j的字母是否为回文子串
    状态方程:f(i, j) = f(i+1, j-1) 且 (s(i) == s(j))
    初始化:f(i, i) = true f(i, i+1) = (s(i) == s(i+1))
    返回值:p(i, j) == ture中j-i+1最长的那个串
     */
    public String longestPalindrome(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }
        int len = s.length();
        int maxLen = 1;//记录最长的回文串长度
        int begin = 0;//记录最长的回文串的初始位置
        int end = 0;//记录最长的回文串的结束位置
        boolean[][] dp = new boolean[len][len];
        for (int r = 1; r < len; r++) {
            for (int l = 0; l < r; l++) {
                if (s.charAt(l) == s.charAt(r) && (r - l <= 2 || dp[l + 1][r - 1])) {
                    dp[l][r] = true;
                    if (r - l + 1 > maxLen) {
                        maxLen = r - l + 1;
                        begin = l;
                        end = r;
                    }
                }
            }
        }
        return s.substring(begin, end + 1);
    }
}

盛最多水的容器 

题目链接:11.盛最多水的容器

 

示例

 

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

解题思路 

使用双指针法,初始时,l为该容器的左边界,r为容器的右边界,维护一个面积的最大值,取l的高和r的高小的那个值作为容器的高,乘以(r - l),得到的结果即为临时面积,再与维护的最大值对比,更新为大的那一个。如果此时r的高比l的高低,就r边界左移,反之l边界右移,当l >= r时循环结束,此时的ret即为最大面积。 

class Solution {
    public int maxArea(int[] height) {
        int ret = 0;
        int l = 0;
        int r = height.length - 1;
        while (l < r) {
            int area = Math.min(height[l], height[r]) * (r - l);
            ret = Math.max(area, ret);
            if (height[l] > height[r]) {
                r--;
            } else {
                l++;
            }
        }
        return ret;
    }
}

删除链表的倒数第n个节点 

题目链接:19.删除链表的倒数第n个节点

输入:head = [1,2,3,4,5], n = 2

输出:[1,2,3,5]

解题思路 

快慢指针思想,当n小于0时,直接返回原链表头结点;当n大于0时只移动快指针,当n等于0时,快慢指针一起移动,当快指针等于空或者快指针.next等于空就跳出循环;再对n进行判断,当n等于1时,说明要删除的是头结点,其他情况将慢指针的下一个指向其下一个的下一个

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if (n < 0) {
            return head;
        }
        ListNode fast = head;
        ListNode slow = head;
        while (fast != null && fast.next != null) {
            if (n > 0) {
                fast = fast.next;
                n--;
            } else {
                fast = fast.next;
                slow = slow.next;
            }
        }
        if (n == 1) {
            head = head.next;
        } else {
            slow.next = slow.next.next;
        }
        return head;
    }
}

合并两个有序链表 

题目链接:21.合并两个有序链表

 

输入:l1 = [1,2,4], l2 = [1,3,4]

输出:[1,1,2,3,4,4]

解题思路 

首先两个链表一起遍历,哪个小就将哪个先加入到新链表中,循环结束后将非空的链表再加入到新链表中即可

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode ret = new ListNode(0);
        ListNode cur = ret;
        while (list1 != null && list2 != null) {
            if (list1.val < list2.val) {
                cur.next = list1;
                cur = cur.next;
                list1 = list1.next;
            } else {
                cur.next = list2;
                cur = cur.next;
                list2 = list2.next;
            }
        }
        ListNode l = list1 == null ? list2 : list1;
        cur.next = l;
        return ret.next;
    }
}

有效的括号 

题目链接:20.有效的括号

解题思路 

 利用栈先进后出的特性可以完美解决该问题,需要注意的遍历结束后如果栈为空,说明是有效的,不为空时说明无效,另外循环时在出栈之前也要判断栈是否为空,如果为空则无效,不为空则继续判断。

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char tmp = s.charAt(i);
            if (tmp == '(' || tmp == '[' || tmp == '{') {
                stack.push(tmp);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                if (tmp == ')' && stack.peek() == '(' ||
                    tmp == ']' && stack.peek() == '[' ||
                    tmp == '}' && stack.peek() == '{') {
                        stack.pop();
                } else {
                    return false;
                }
            }
        }
        if (stack.isEmpty()) {
            return true;
        }
        return false;
    }
}

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADI Blackfin DSP处理器-BF533的开发详解33:数字信号处理详解-FFT(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 FFT&#xff08;Fast Fourier Transformation&#xff09;&#xff0c;即为快速傅氏变换&#xff0c;是离散傅氏变换的快速算法&#x…

web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析

介绍 本文并不表示R在数据分析方面比Python更好或更快速&#xff0c;我本人每天都使用两种语言。这篇文章只是提供了比较这两种语言的机会。 本文中的 数据 每天都会更新&#xff0c;我的文件版本更大&#xff0c;为4.63 GB。 CSV文件包含纽约市的311条投诉。它是纽约市开放…

MySQL 数据库 C/C++ 常用函数

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

火爆出圈的OpenAI模型ChatGPT体验

1、ChatGPT简要介绍 ChatGPT是一种高效的语言模型&#xff0c;全称为"聊天式自动回复生成技术"&#xff08;Chat-based Automatic Reply Generation Technology&#xff09;&#xff0c;用于预测人类语言的后续内容。它是基于OpenAI的GPT-3模型构建的&#xff0c;具…

XCIE-HUAWEI-超级完整的BGP-1

XCIE-HUAWEI-超级完整的BGP-1 声明&#xff0c;内容对比前面的可能差一点&#xff0c;因为这个BGP我是会的&#xff0c;但是华为的特性啥的不太会 所以相对来说可能没那么详细&#xff0c;不过应该也够的了&#xff0c;要看思科的翻我的文章去有思科的 先说一个东西 面试会问…

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例 STEP7-Micro/WIN SMART 从V2.4 版本开始,软件中直接集成 Modbus TCP 库指令,安装软件后,Modbus TCP 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。 如下图Modbus TCP库指令…

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析

最近我们被客户要求撰写关于曲线回归的研究报告&#xff0c;包括一些图形和统计输出。本文将使用三种方法使模型适合曲线数据&#xff1a;1&#xff09;多项式回归&#xff1b;2&#xff09;用多项式样条进行B样条回归&#xff1b;3&#xff09; 进行非线性回归。在此示例中&am…

微信小程序 | 一比一复刻世界杯点球大战

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

Codeforces Round #837 (Div. 2) Hossam and Friends

原题链接&#xff1a;https://codeforces.com/contest/1771/problem/B 题意 &#xff1a;你总共有n个朋友编号1~n&#xff0c;其中m对互不认识&#xff0c;求1~n区间中没有互不认识的子段的总个数。 思路&#xff1a;总字段个数为每个编号前面的编号个数&#xff08;包括自己…

RK3568平台开发系列讲解(安卓适配篇)Android11 预安装应用功能

&#x1f680;返回专栏总目录 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;Android11 上的应用预安装功能&#xff0c;主要是指配置产品时&#xff0c;需要将提前准备好的第三方应用 apk 放进 android 系统。在实际的研发过程…

【NumPy 数组连接、拆分、搜索、排序】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

[附源码]Python计算机毕业设计宠物领养系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

数学基础从高一开始5、充分必要条件

数学基础从高一开始5、充分必要条件 目录 数学基础从高一开始5、充分必要条件 概念复习 命题 真命题与假命题 命题的形式 概念定义 例1&#xff1a; 例2 练习 总结 概念复习 命题 命题:把用语言、符号或式子表达的&#xff0c;可以判断真假的陈述句称为命题。 真命题…

杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】

1.说一说三大范式 「第一范式」&#xff1a;数据库中的字段具有「原子性」&#xff0c;不可再分&#xff0c;并且是单一职责 「第二范式」&#xff1a;「建立在第一范式的基础上」&#xff0c;第二范式要求数据库表中的每个实例或行必须「可以被惟一地区分」。为实现区分通常需…

Rasa 基于规则的对话管理: 天气预报机器人

文章目录1. fallbackNLU fallback2. 意图触发动作3. 表单定义表单激活表单执行表单任务4. 天气预报机器人nlu.ymlstories.ymlrules.ymlcities.ymldomain.ymlconfig.ymlendpoints.ymlcredentials.ymlactions.py测试learn from https://github.com/Chinese-NLP-book/rasa_chinese…

Keras深度学习实战(40)——音频生成

Keras深度学习实战&#xff08;40&#xff09;——音频生成0. 前言1. 模型与数据集分析1.1 数据集分析1.2 模型分析2. 音频生成模型2.1 数据集加载与预处理2.2 模型构建与训练小结系列链接0. 前言 我们已经在《文本生成模型》一节中学习了如何利用深度神经网络生成文本&#x…

智能、人机融合智能和深度态势感知

内容摘要&#xff1a;人工智能的符号主义、联结主义和行为主义三大学派&#xff0c;分别从不同角度切入智能的本质&#xff0c;其研究观点相互补充但各有局限。在人机融合过程中&#xff0c;怎样进行人机功能分配&#xff0c;人机怎样融合学习、理解、决策、推理乃至感知。数据…

获取微信公众号token

access_token是公众号的全局唯一接口调用凭据&#xff0c;公众号调用各接口时都需使用access_token 接口调用请求说明 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET参数说明 参数是否必填说…