每日5题Day1 - LeetCode 1-5

news2024/11/16 19:54:22

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

第一题: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;
    }
}

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

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

相关文章

pytorch 2.0 多线程并行,导致GPU利用100%,卡住

背景&#xff1a; 程序中有pytorch模型两个&#xff0c;yolov5&#xff0c;crnn。 之前无论是pth格式&#xff0c;还是TRT格式&#xff0c;并行的都没有问题。 最近发现&#xff0c;多线程ThreadPoolExecutor(max_workers2)调用的时候&#xff0c;即单个进程内处理一张图像&a…

Electron+Vue+pyinstaller服务打包

electron环境安装略 1. electron的入口文件配置test.js, 需要在package.json 配置文件中指定main: src/test.js const { app, BrowserWindow } require(electron)const createWindow () > {const win new BrowserWindow({width: 800,height: 600})// win.loadFile(inde…

【现代C++】三路比较运算符

C20引入了三路比较运算符&#xff08;也称为太空船运算符&#xff0c;<>&#xff09;&#xff0c;它允许同时比较两个值&#xff0c;并返回它们的相对顺序。这个运算符简化了需要定义多个比较运算符&#xff08;如、!、<、<、>、>&#xff09;的类的代码&…

如何在 Windows 11/10 中恢复已删除的分区

在将重要数据存储在计算机上之前&#xff0c;许多用户会创建分区以更好地组织和管理他们的文件。此分区可以在内部硬盘驱动器或外部存储设备上创建。但是&#xff0c;有时可能会意外删除分区。如果发生这种情况&#xff0c;您可能想知道是否可以在不丢失任何信息的情况下恢复已…

elasticsearch(下载安装、基本操作、查询、聚合、SpringData-Elasticsearch)

文章目录 1. 了解搜索技术1.1. 什么是搜索1.2. 新业务需求1.3. 搜索引擎1.4. 倒排索引(Inverted index)1.5. 认识lucene1.6. 什么是全文检索 2.下载安装2.1. elastic2.2 下载2.2.1 elasticsearch2.2.2 kibana地址2.2.3 ik中文分词器地址 2.3 安装elasticsearch2.3.1 安装elasti…

移动端自动化测试工具 Appium 之持续集成

文章目录 一、背景二、前置条件三、代码部分1、pom.xml文件配置2、main入口代码 四、Jenkins 部分1、下载Jenkins2、安装插件3、job配置4、选择构建 五、工程目录六、报告示例七、总结 一、背景 持续集成是老生话谈的事情&#xff0c;用的好不好&#xff0c;看自己公司与使用场…

【3dmax笔记】022:文件合并、导入、导出

文章目录 一、合并二、导入三、导出四、注意事项一、合并 只能合并 max 文件(高版本能够合并低版本模型,低版本不能合并高版本的模型)。点击【文件】→【导入】→【合并】: 选择要合并的文件,后缀名为3dmax默认的格式,max文件。 二、导入 点击【文件】→【导入】→【导…

Python轻量级Web框架Flask(14)—— 自己做Flask项目总结

0、前言&#xff1a; 本文意在记录自己在做毕业Flask项目开发时遇到的一些问题&#xff0c;并将问题解决方案记录下来&#xff0c;可做日后查询本文也会记录自己做FLask项目时实现的一些功能&#xff0c;作为开发工作的进程记录注意&#xff1a;用Flask开发的前提是已经设计好…

202009青少年软件编程(Python)等级考试试卷(三级)

第 1 题 【单选题】 通过算式123122021120可将二进制1101 转为十进制,下列进制转换结果正确的是?( ) A :0b10转为十进制,结果是2 B :0d10转为十进制,结果是8 C :0x10转为十进制,结果是10 D :0o10转为十进制,结果是16 正确答案:A 试题解析: 第 2 题 【单选题】 语句flo…

svn如何远程访问?

svn&#xff08;Subversion&#xff09;是一种版本控制系统&#xff0c;广泛应用于软件开发领域。它能够追踪文件和目录的变化&#xff0c;记录每个版本的修改内容&#xff0c;并允许多人协同开发。svn的远程访问功能允许开发人员可以在不同的地点访问和管理代码&#xff0c;提…

ES6之正则扩展

正则表达式扩展 u修饰符&#xff08;Unicode模式&#xff09;y修饰符&#xff08;Sticky或粘连模式&#xff09;s修饰符&#xff08;dotAll模式&#xff09;Unicode属性转义正则实例的flags属性字符串方法与正则表达式的整合 javascript的常用的正则表达式 验证数字邮箱验证手机…

华为OD机试 - CPU算力分配(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

string的模拟全实现

文章目录 &#x1f4dd;前言&#x1f320; string的基本要素&#x1f309;构造函数和析构函数&#x1f320;string()&#x1f309;string(const char* str ""); &#x1f320;~string()&#x1f309;深拷贝string(const string& s); &#x1f320;三个成员函数的…

外网ip地址怎么获取?快解析

大家都清楚互联网是通过ip地址通信的&#xff0c;ip地址又分内网ip和外网ip。内网ip只能在内网使用&#xff1b;而外网ip作为电脑唯一标识&#xff0c;可在公网使用。那么外网ip地址怎么获取呢&#xff1f; 外网ip是网络运营商分配给用户的。目前最常见的两种上网方式一个是拉…

金航标kinghelm萨科微slkor公司发展和品牌传播

为了金航标kinghelm萨科微slkor公司发展和品牌传播&#xff0c;推出了”金航标每日芯闻“与“萨科微每日芯闻“栏目&#xff0c;影响力非常好。这一构想并非一时的灵光乍现&#xff0c;而是经过深思熟虑和充分调研的结果。制定该栏目的模板时候时&#xff0c;就明确了要求语音版…

【nfs服务部署服务端和客户端搭建】

原理 NFS&#xff08;Network File System&#xff09;是文件服务器之一。它的功能是可以通过网络&#xff0c;让不同的机器、不同的操作系统可以彼此共享数据文件。 NFS服务器可以让服务端的共享目录挂载到本地端的文件系统中&#xff0c;其他服务器如果想访问共享目录&#…

windows 安装 Conda

1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。Conda 是为 Python 程序创建的&#xff0c;适用于 Linux&#xff0c;OS X 和Windows&#xff0c;也可以打包和分发其他软…

键盘和鼠标的隐形观察者:用Python的pynput库记录每一个动作

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 揭秘pynput&#xff1a;监控神器还是隐私威胁&#xff1f; 在数字时代&#xff0c;的每一次键盘敲击和鼠标点击都可能泄露信息。但如果能够控制这一过程&#xff0c;又将如何利用这些数据呢&#xff1f;Python的pyn…

“Linux”目录结构and配置网络

了解完命令格式和vi、vim编辑器后&#xff0c;我们来认识一下目录的结构&#xff1a; 一、目录 &#xff08;1&#xff09;目录的特点 windows特点&#xff1a; Windows中有C、D、E盘&#xff0c;每个都是一个根系统 Linux特点&#xff1a; linux中只有一个根&#xff08;单…