每日5题Day1 - LeetCode 1-5

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!

第一题:1. 两数之和 - 力扣(LeetCode)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        //返回值为Int[]数组,所以先初始化,求两数之和,使用空间换时间,用一个HashMap来存储
        int[] res = new int[2];
        Map<Integer, Integer> map = new HashMap<>();
        //对于每一个数都进行遍历,因为不知道到底哪个数是第一个数
        for(int i = 0; i < nums.length; i++){
            //每次计算一个差值
            int dif = target - nums[i];
            //key值找到了,取到的value,就是第一个数
            if(map.containsKey(dif)){
                //找到了,记录一下,不用在意先后顺序
                res[0] = map.get(dif);
                res[1] = i;
                //因为只有一组正确答案,所以有正确答案了就break
                break;
            }
            map.put(nums[i], i);
        }
        return res;
    }
}

第二题:2. 两数相加 - 力扣(LeetCode)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //讨论特殊情况,如果某一条是null,则直接返回另外一条
        if(l1 == null){
            return l2;
        }
        if(l2 == null){
            return l1;
        }
        //初始化一个头节点,注意要mod10
        ListNode node = new ListNode((l1.val + l2.val) % 10);
        //设置初始的进位位
        int carry = (l1.val + l2.val > 9) ? 1 : 0;
        //当前俩节点的值用过了,指向下一位
        l1 = l1.next;
        l2 = l2.next;
        //在正式开始前,首先创造一个dummy节点用于指向虚拟节点,这样返回的时候就直接返回dummy.next
        ListNode dummyhead = new ListNode(-1, node);
        //注意判断条件:只有进位位及两个链表都遍历完了才能结束
        while(l1 != null || l2 != null || carry != 0){
            //直接使用进位位carry来初始化当前的值,因为要么是0,要么是1
            int sum = carry;
            if(l1 != null){
                sum += l1.val;
                l1 = l1.next;
            }
            if(l2 != null){
                sum += l2.val;
                l2 = l2.next;
            }
            carry = sum / 10;
            //创建的节点与之前的节点相连
            node.next = new ListNode(sum > 9 ? sum % 10 : sum);
            //指向当前节点
            node = node.next;
        }
        return dummyhead.next;
    }
}

第三题:3. 两数相加 - 力扣(LeetCode)

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //如果长度为0或者1,直接返回自身长度就OK
        if(s.length() < 2){
            return s.length();
        }
        //便于方便,转为字符数组
        char[] words = s.toCharArray();
        //用数组来存一个字符的频率不方便,使用map来存最晚出现的下标
        Map<Character, Integer> map = new HashMap<>();
        //res是最长的长度,l是我们的左边区间
        int res = 0, l = 0;
        //对于每一个字符进行遍历
        for(int r = 0; r < words.length; r++){
            //当key值存在的时候,意味着有重复字符了,所以进行左边界的更新
            if(map.containsKey(words[r])){
                l = Math.max(l, map.get(words[r]) + 1);
            }
            //注意map的特性,如果对于已经存在的key进行put,会覆盖掉原来的值
            map.put(words[r], r);
            //每次都更新一下最大值
            res = Math.max(res, (r - l) + 1);
        }
        return res;
    }
}

第四题:4. 寻找两个正序数组的中位数 - 力扣(LeetCode)

public class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        //看到log的要求和有序,一定要想到二分,对于搜索,一个长度为n的有序数组可以看作一个BST,对于任意数的搜索,最大时间就是树高log(n)
        int m = nums1.length;
        int n = nums2.length;
        
        // 确保 nums1 是较短的数组
        if (m > n) {
            return findMedianSortedArrays(nums2, nums1);
        }
        
        int left = 0;
        int right = m;
        int partitionX, partitionY;
        
        while (left <= right) {
            // 在 nums1 上进行二分查找
            partitionX = (left + right) / 2;
            partitionY = (m + n + 1) / 2 - partitionX;
            
            // 计算划分两部分的最大值和最小值
            int maxX = (partitionX == 0) ? Integer.MIN_VALUE : nums1[partitionX - 1];
            int minX = (partitionX == m) ? Integer.MAX_VALUE : nums1[partitionX];
            int maxY = (partitionY == 0) ? Integer.MIN_VALUE : nums2[partitionY - 1];
            int minY = (partitionY == n) ? Integer.MAX_VALUE : nums2[partitionY];
            // 分类讨论
            // 判断是否满足条件
            if (maxX <= minY && maxY <= minX) {
                // 如果总元素数量为偶数,则取两个最大值和最小值的平均值
                if ((m + n) % 2 == 0) {
                    return (double) (Math.max(maxX, maxY) + Math.min(minX, minY)) / 2;
                } else {
                    // 如果总元素数量为奇数,则取较大的最大值
                    return (double) Math.max(maxX, maxY);
                }
            } else if (maxX > minY) {
                // 如果 maxX 大于 minY,说明划分位置过大,向左移动
                right = partitionX - 1;
            } else {
                // 如果 maxX 小于等于 minY,说明划分位置过小,向右移动
                left = partitionX + 1;
            }
        }
        throw new IllegalArgumentException("Input arrays are not sorted.");
    }
}


 第五题:5. 最长回文子串 - 力扣(LeetCode)

class Solution {
    public String longestPalindrome(String s) {
        //不使用dp了,直接使用中心扩散法,这样在遍历的过程可以直接降为一维的
        if (s == null || s.length() < 1) {
            return "";
        }
        int start = 0, end = 0; // 用于记录最长回文子串的起始和结束索引
        // 遍历每个字符,以该字符为中心向两边扩展,分别处理单个字符和两个字符为中心的情况
        for (int i = 0; i < s.length(); i++) {
            int len1 = expandAroundCenter(s, i, i); // 以当前字符为中心的回文串长度
            int len2 = expandAroundCenter(s, i, i + 1); // 以当前字符和下一个字符为中心的回文串长度
            int len = Math.max(len1, len2); // 取两种情况下的最长回文串长度
            // 如果当前回文串长度大于之前记录的最长回文串长度,则更新起始和结束索引
            if (len > end - start) {
                start = i - (len - 1) / 2; // 计算起始索引
                end = i + len / 2; // 计算结束索引
            }
        }
        return s.substring(start, end + 1); // 返回最长回文子串
    }
    // 辅助方法:以left和right为中心向两边扩展,寻找最长回文串的长度
    private int expandAroundCenter(String s, int left, int right) {
        // 当左右指针合法且字符相等时,向两边扩展
        while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
            left--; // 向左扩展
            right++; // 向右扩展
        }
        // 返回当前找到的回文串的长度
        return right - left - 1;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】数据链路层 差错控制 循环冗余码CRC及FCS 习题5

在计算机网络中&#xff0c;关于差错控制&#xff0c;我们主要要比特控制。 比特控制&#xff0c;简单理解&#xff0c;即在传输过程中&#xff0c;0变为1&#xff0c;1变为0。 差错控制主要有两类 自动重传请求ARQ——检错编码 &#xff08;接收方检测出差错&#xff0c;就设…

数字社交的先锋:探索Facebook的未来发展

在当今数字化时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。而在众多社交平台中&#xff0c;Facebook一直处于引领地位&#xff0c;不断探索和创新&#xff0c;塑造着数字社交的未来。本文将深入探讨Facebook作为数字社交的先锋&#xff0c;探索其未来发展…

LabVIEW天然气压缩因子软件设计

LabVIEW天然气压缩因子软件设计 项目背景 天然气作为一种重要的能源&#xff0c;其压缩因子的准确计算对于流量的计量和输送过程的优化具有关键意义。传统的计算方法不仅步骤繁琐&#xff0c;而且难以满足现场快速响应的需求。因此&#xff0c;开发一款既能保证计算精度又便于…

BUUCTF靶场[MISC]wireshark、被嗅探的流量、神秘龙卷风、另一个世界

[misc]wireshark 考点&#xff1a;流量、追踪流 工具&#xff1a;wireshark 先看题目&#xff0c;管理员密码 将下载的文件用wireshark打开&#xff0c;查找flag 点击追踪tcp流&#xff0c;开始挨个查看flag [misc]被嗅探的流量 考点&#xff1a;流量、追踪流 工具&#xf…

010.理解异步性

异步消息传递是响应式系统的一个关键特性。但到底是什么异步性&#xff0c;为什么它对响应式应用程序如此重要?我们的人生注定在许多异步任务中。你可能没有意识到&#xff0c;但你的日常活动如果它们本质上不是异步的&#xff0c;那就太烦人了。要理解什么是异步&#xff0c;…

批量提取指定目录下的所有文件名

::批量提取指定目录下的所有文件名&#xff1a; echo off chcp 65001 > nul setlocal enabledelayedexpansion set "folder目录路径" for /r "%folder%" %%F in (*) do ( set "filename%%~nxF" echo !filename! ) endlocal pause…

ASIL详解

概念 随着汽车新四化的发展&#xff0c;整车E/E系统的复杂性也不断增加&#xff0c;功能安全正成为一种更主流的要求。汽车安全完整性等级&#xff08;ASIL&#xff09;分解为实现更高水平的诊断覆盖度提供了可靠而稳健的途径&#xff0c;并在开发具有更高ASIL等级的安全关键系…

Edge浏览器自动翻译功能按钮不见了

前言&#xff1a; 平时偶尔会用到Edge的页面翻译功能&#xff0c;使用挺方便。突然发现Edge浏览器的翻译功能不见 了。如下图所示&#xff1a; 解决思路&#xff1a; 1、从网上找各种解决方案也没有解决&#xff0c;其中有一个说到点右上角的三个点 2、点击设置…

专业矢量绘图软件Sketch for mac v100中文激活版

Sketch for Mac 是一款专业的矢量图形设计工具&#xff0c;主要用于 UI/UX 设计、网页设计、图标设计等领域。它的界面简洁、易用&#xff0c;功能强大&#xff0c;可以帮助设计师快速创建高质量的设计作品。 Sketch for Mac 可以轻松地创建矢量图形、图标、网页布局、移动应用…

利用关系感知一致性和虚拟特征补偿解决医学分类中的长尾问题

文章目录 Combat Long-Tails in Medical Classification with Relation-Aware Consistency and Virtual Features Compensation摘要方法实验结果 Combat Long-Tails in Medical Classification with Relation-Aware Consistency and Virtual Features Compensation 摘要 由于…

SpringBoot接收参数的19种方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583

业务系统加固和安全设备加固

业务系统加固 业务系统包含哪些系统? 业务系统漏洞面临的风险 1web风险 2漏洞扫描&#xff0c;端口扫描 3系统漏洞 4逻辑漏洞 5 信息泄露 6拒绝服务 7口令爆破 加固方式&#xff1a; 在风险加上修复 1web漏洞&#xff1a; 包括csrf,xss&#xff0c;口令破解等等 修…

仿C#或Java基础类型自定义

class Int{ private:int _value 0; public:operator int() const{ // 隐式转换return _value;}// 显式转换explicit operator int*() const { return nullptr; }operator(const int page){_value page;}operator float() const{return static_cast<float>(_value);}ope…

如何利用AI生成答辩PPT?笔灵AI答辩PPT,智能识别关键点

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

Java后端的字符串相等、集合非空判定

一.字符串相等判定 使用工具类的判定 使用原始方法 在调用equals()之前显式地检查对象是否为null&#xff1a; 将常量字符串放在前面调用equals()&#xff0c;这样即使roleCode为null也不会抛出NullPointerException&#xff1a; 二.集合非空判定 使用工具类 原始&#xff0…

Python-VBA函数之旅-vars函数

目录 一、vars函数的常见应用场景 二、vars函数使用注意事项 三、如何用好vars函数&#xff1f; 1、vars函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;https://myelsa1024.blog.csdn.net/ 一、vars函数…

数据结构--AVL树

一、什么是AVL树 1、AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在…

YOLOv5独家改进:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,这就是StarNet的核心创新,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 💡💡💡如何跟YOLOv5结合:替代YOLOv5的backbone 收录 YOL…

一表捋清网络安全等级保护测评要求

三级网络安全等级保护测评指标&#xff1a; 对于中小企事业单位来说&#xff0c;网络安全建设是一个复杂且投入较高的过程&#xff0c;因此他们更倾向于寻找一种“省心省力”的等保建设方案&#xff0c;以及一种能够持续有效且具有较高性价比的网络安全建设投入方式。 此时&…

直流无刷电机控制(一)六步换相(有感霍尔)附六步换相实现代码

直流无刷电机概述 直流无刷电机的转子为永磁铁&#xff0c;定子为换相线圈&#xff0c;有别于有刷电机通过电刷或者换向器换相&#xff0c;无刷电机通过控制器电子换相。 极对数 直流无刷电机采用永磁铁作为转子&#xff0c;一对NS磁极为一极对&#xff0c;为了使电机运转更…