每日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;//因为只有一组正确答案,所以有正确答案了就breakbreak;}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;}//初始化一个头节点,注意要mod10ListNode 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.nextListNode dummyhead = new ListNode(-1, node);//注意判断条件:只有进位位及两个链表都遍历完了才能结束while(l1 != null || l2 != null || carry != 0){//直接使用进位位carry来初始化当前的值,因为要么是0,要么是1int 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,直接返回自身长度就OKif(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.hqwc.cn/news/702185.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring:SpringBoot Starter 工作原理详解

一、前言 通过使用Spring Boot Starter&#xff0c;开发人员可以避免手动查找和添加每个所需的库&#xff0c;从而大大简化了项目的依赖管理。这些starter不仅包含了库依赖&#xff0c;还可能包含自动配置&#xff0c;从而减少了开发人员需要编写的配置代码。 本文将分析Spring…

DDoS攻击揭秘与网站防护策略

DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;是一种利用大量被控制的计算机或智能设备&#xff08;如僵尸网络&#xff09;对目标网站或服务器发起大量无效请求或数据流量&#xff0c;从而导致目标系统资源耗尽、服务崩溃或无法处理正常请求的攻击方式。这种攻击通常是…

天锐绿盾|设计院图纸透明加密软件、制造业文件资料防止外泄

#图纸加密软件# 天锐绿盾是一家专注于数据安全解决方案的提供商&#xff0c;其产品主要为企业级用户设计&#xff0c;旨在保护敏感信息和知识产权免遭未经授权的访问或泄露。"天锐绿盾"的图纸透明加密软件和机械制造业文件资料防止外泄系统&#xff0c;是专为设计院…

R实验 基础(一)

实验目的&#xff1a; 了解实验报告书的书写要求&#xff1b;掌握R、RStudio的下载与安装&#xff1b;熟悉R的界面及基本操作&#xff1b;进一步熟悉R和RStudio的界面及基本操作&#xff1b;初步了解R的绘图和程序包的下载、安装和加载使用。 实验内容&#xff1a; 了解实验报…

【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十篇&#xff1a;Java中ReentrantLock锁讲解。 在Java并发编程中&#xff0c;保证多线程环境下的数据安全是至关重要的。ReentrantLock 是Java中用于实现线程安全的一种锁机制。本篇博客将深入介绍 ReentrantLock 的原…

HTTP代理可以应用在那些领域呢

HTTP代理是IP代理领域中一个重要组成部分&#xff0c;它基于HTTP协议传输&#xff0c;使用海外服务器帮助用户绕开访问限制&#xff0c;浏览查看海外资讯信息。 HTTP代理可以应用在哪些领域呢&#xff1f; 1.保护使用者隐私 当今越来越数据被上传到网络云端上&#xff0c;用户…

光速入门php----基础知识精炼汇总(还在为一大片面向小白的入门资料发愁?入门php这一篇就够了)

前言 欢迎来到我的博客 个人主页&#xff1a;北岭敲键盘的荒漠猫-CSDN博客 本文是我对php基础知识部分的一个整理。 适合有python&#xff0c;c(任意一门语言)基础的人看。 因为有编程基础苦于教程过多的讲解&#xff0c;所以我会更加简明清晰的整理这些知识点不做过多的废…

51单片机小车制造过程记录

首先感谢B站up主好家伙vcc的资料。 这次小车做出来虽然资料挺全的&#xff0c;但中间还是犯了很多不该犯的错误。 第一个&#xff0c;物料这次我们搞错了挺多&#xff0c;最离谱的应该是最小系统板都错了。 资料里用的stm32f103c8t6&#xff0c;我们开始买成了stm32f103c8t6。…

HTML静态网页成品作业(HTML+CSS)——自动化专业介绍设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

Java 循环结构 - for, while 及 do...while

Java 循环结构 - for, while 及 do…while 顺序结构的程序语句只能被执行一次。 如果您想要同样的操作执行多次&#xff0c;就需要使用循环结构。 Java中有三种主要的循环结构&#xff1a; while 循环 do…while 循环 for 循环 在 Java5 中引入了一种主要用于数组的增强型 f…

搭建Rust开发环境

Windows搭建 下载&#xff1a;https://www.rust-lang.org/zh-CN/tools/install Linux搭建 这里我更推荐基于Linux搭建。 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh等一会儿以后&#xff0c;会让你输入命令&#xff0c;这里输入1&#xff1a; 之后就…

经典神经网络(8)GAN、CGAN、DCGAN、LSGAN及其在MNIST数据集上的应用

经典神经网络(8)GAN、CGAN、DCGAN、LSGAN及其在MNIST数据集上的应用 1 GAN的简述及其在MNIST数据集上的应用 GAN模型主导了生成式建模的前一个时代&#xff0c;但由于训练过程中的不稳定性&#xff0c;对GAN进行扩展需要仔细调整网络结构和训练考虑&#xff0c;因此GANs虽然在…