记录力扣热题-100——从链表中找到刷题感觉

news2024/11/25 6:37:58

目录

  • 一. 🦁 前言
  • 二. 🦁 解题过程
    • 1. 题目
    • 2. 思路一
    • 3. 思路二
  • 三. 🦁 文末活动
    • 内容简介
    • 本书结构
    • 关于代码

一. 🦁 前言

狮子此前已经很久没有碰过算法题了,对于之前好不容易攒起来的题感又没了…最近准备面试,又得重新将其捡起来。算法题是一种很奇妙的东西,如果刚开始刷很难找得到感觉,总得一步一步慢慢来,心急吃不到热豆腐,狮子建议如果刚开始刷题,先从简单的链表题开始刷,不断动笔演练解题过程,感觉慢慢就会好起来了,现在狮子来分享一下每日一题之——环形链表。

二. 🦁 解题过程

1. 题目

给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。

在这里插入图片描述

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

2. 思路一

如果学过hash表,这个题最简单的方法就是建立一个HashSet,然后遍历整个链表,将结点一个一个存进去,如果遍历到第N个结点存不进去,则说明该链表存在环!!!

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null) return false;
        Set<ListNode> set = new HashSet<>();
        ListNode pre = head;
        while(pre.next != null){
            if(! set.add(pre)){
                return true;
            }
            pre = pre.next;
        }
        return false;
    }
}

3. 思路二

第二种思路就是可以使用快慢指针pre和post,并且pre需要比post多走一步。在同一起点时,如果是直链则pre永远不会和post相遇!如果链表存在环,则终会相遇!!!代码如下:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head == null || head.next == null) return false;
        ListNode pre = head;
        ListNode post = head;
        while(pre != null && pre.next != null){
            post = post.next;
            pre = pre.next;
            pre = pre.next;
            if(post == pre) return true;
        }
        return false;
    }
}

三. 🦁 文末活动

在这里插入图片描述


🦁 送书抽奖活动 🦁

算法训练是一种很枯燥的东西,有一本好的辅助书本可以助你乘风破浪,现在市面上大多算法书都是基于C++的,对于Java选手非常不友好,现在给大家推荐一本好书,由机械出版社出版的《算法精粹:经典计算机科学问题的Java实现》,基于JDK11实现,非常实用,推荐入手!!!

本次活动由机械出版社友情赞助!!!

如果说计算机之于计算机科学就像望远镜之于天文学,那么编程语言就像望远镜的镜头。无论是在本科的课堂(计算机科学、软件工程等)上,还是在中级编程课本(例如,关于人工智能或算法的入门书)中,有些交给新手程序员解决的特定编程问题已经变得司空见惯了,以至于可以被视为经典。从简单的只需寥寥数行代码就能够解决的问题,到复杂的需要跨多个章节来构建系统的问题,这些问题范围很广。有些问题涉及人工智能,有些问题仅涉及常识,有些问题是实际存在的,而有些问题是虚构的。

20年来,Java已经成为世界上非常流行的编程语言之一。可以说,它已经成为企业、高等教育以及Android应用程序开发中的主导语言。通过本书,希望能够引领大家意识到Java不仅仅是实现最终目标的一种手段,还是解决计算问题的一种工具。本书中的问题能够帮助老练的程序员在学习某些编程语言高级特性的同时,反思之前学过的计算机科学课程内容并有新的收获。使用Java的在校生和自学型程序员都可以通过学习普遍适用的问题求解技术来加速计算机科学课程的学习进度。本书涵盖了各种各样的问题,因此所有人都能从中受益。

在这里插入图片描述

内容简介

无论何种软件开发问题,都有可能已经有了解决方案。本书收集了非常有用的解决方案,可以指导你学习那些经过千锤百炼的解决问题的技术。本书介绍的原则和算法可以保证你在一个又一个的项目中节省大量的时间。

本书包含50多个练习,这些练习是多年来一直在计算机科学课堂中使用的。你可以通过实践这些例子来探索核心算法、约束问题、人工智能应用等。

本书主要内容包括:

  • 递归、记忆化和位操作。

  • 搜索、图和遗传算法。

  • 约束满足问题。

  • k均值聚类、神经网络和对抗搜索。

本书结构

  • 第1章介绍大多数读者可能已经熟知的问题求解技术。像递归、记忆化和位运算这类内容是后续章节讨论其他技术的基础。

  • 第2章重点介绍搜索问题。搜索是一个非常大的主题,本书中的大部分问题都可以归到这个主题下。本章介绍最基本的搜索算法,包括二分搜索、深度优先搜索、广度优先搜索和A*搜索。

  • 第3章介绍如何建立一个框架来解决广泛的问题。这些问题可以用相互之间受到约束的有限领域变量来进行抽象,包括经典的八皇后问题、澳大利亚地图着色问题以及字谜问题。

  • 第4章探索图算法。对于初学者来说,这些算法的适用范围非常广。本章将介绍如何构建图数据结构,然后使用它来解决几个经典的优化问题。

  • 第5章探讨遗传算法,这种算法在不确定性上要比本书中的大多数算法大得多,但有时可以解决那些传统算法无法在合理的时间内解决的问题。

  • 第6章介绍k均值聚类,这可能是本书中算法最具体的一章。这种聚类技术实现简单,易于理解,适用范围广。

  • 第7章解释什么是神经网络,旨在让读者领略简单神经网络究竟是什么样子的。本章不会全面介绍这个令人兴奋而又不断发展的领域,而是介绍如何在不使用外部库的情况下根据基本原理来构建神经网络,让你真正了解神经网络究竟是如何工作的。

  • 第8章介绍双人博弈中的对抗搜索。本章将探索一种被称为极小化极大的搜索算法,该算法可以用来开发国际象棋、国际跳棋和四子棋程序。

  • 第9章涵盖一些书中其他章节没有提及的有趣问题。

  • 第10章是对Oracle的Java语言架构师布赖恩·戈茨(Brian Goetz)的访谈,他指导了该语言的开发工作。他为读者提供了一些有关编程和计算机科学的明智建议。

关于代码

本书源代码是基于Java 11编写的,而且利用了Java 11的某些新特性。之所以选择Java 11版本,是因为该版本是撰写本文时Java所发布的最新LTS(Long-Term Support,长期维护)版本。事实上,其中大量代码都可以在Java 8及之后的版本中运行。据我所知,仍有很多程序员出于各种各样的原因(比如Android)在使用Java 8,但是我希望能在使用较新Java版本的同时,通过讲授一些该语言的新特性来为读者提供额外的价值。

本次活动赠书5本,评论区抽取5位小伙伴送书

活动时间: 截止到2023-07-12 20: 00
参与方式: 点赞、收藏本文章,并评论“人生苦短,我用Java!”
抽奖时间: 2023.07.12
公布时间: 2023.07.12
通知方式:交流群内公布或私信通知

更多活动可继续关注上方🦁的博客,好运总会轮到你!!!

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

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

相关文章

【Linux从入门到精通|开发工具】---gcc/g++的基本使用

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 接下来我们来学习L…

ROS:节点运行管理launch文件

目录 一、launch文件1.1概念1.2作用1.3实例1.新建launch文件2.调用 launch 文件 二、<launch>三、node四、include五、remap六、param七、rosparam八、group九、arg 一、launch文件 1.1概念 aunch 文件是一个 XML 格式的文件&#xff0c;可以启动本地和远程的多个节点&…

Redis从入门到精通【进阶篇】之对象机制详解

文章目录 0. 前言1. 详解1.1 redisObject 对象设计目的1.2 redisObject数据结构1.2 Redis 是如何使用redisObject1.2.1. 对象创建1.2.2. 对象引用计数1.2.3. 对象共享1.2.4. 对象的编码方式1.2.4. 对象的值 2. 总结2.1. redisObject对象如何实现数据共享和对象池技术&#xff1…

vue项目打包并配置到iOS工程中

一、修改vue项目的配置文件 将config文件夹里面的index.js中的 assetsPublicPath的值修改为“./” Webpack.prod.conf.js 中output添加参数publicPath:./ 在webpack.base.conf.js里 publicPath: process.env.NODE_ENV 生产 &#xff1f;./ config.build.assetsPublicPath :…

Compose编排工具应用

补充&#xff1a; Docker Compose 文件&#xff1a;Docker Compose 是一个用于定义和运行多个 Docker 容器的工具。它使用 YAML 文件格式来描述应用程序的各个组件和其配置。以下是一个简单的示例&#xff1a; 在上面的示例中&#xff0c;我们定义了两个服务&#xff1a;web 和…

SpringBoot 之实现 PDF 添加水印的方案

简介 PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;是一种流行的文件格式&#xff0c;它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下&#xff0c;我们需要对 PDF 文件添加水印&#xff0c;以使其更具有辨识度或者保护其版…

ChatGLM2-6B的P-Tuning微调

ChatGLM2-6B&#xff1a;https://github.com/THUDM/ChatGLM2-6B 模型地址&#xff1a;https://huggingface.co/THUDM/chatglm2-6b 详细步骤同&#xff1a;ChatGLM-6B的P-Tuning微调详细步骤及结果验证 环境可复用ChatGLM-6B&#xff08;上述部署教程&#xff09;&#xff0c;…

简要介绍 | 知识蒸馏:轻量级模型的智慧之源

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对知识蒸馏进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 知识蒸馏&#xff1a;轻量级模型的智慧之源 A Gentle Introduction to Hint Learning & Knowledge Distillation | by LA Tran | …

Some about RMI

&#xff08;备份防止忘掉&#xff09; 一开始编译javac所有文件 这个问题概率遇到 解决方法&#xff1a; 然后java编译impl文件 直到出现bound in registry这一句 然后这个cmd不要关掉 重新在eclipse这个类的工作路径打开一个cmd 看到这个之后回到eclipse里面运行app这个文…

数据结构--树的性质

数据结构–树的性质 树的常考性质 常见考点 1 : 结点数 总度数 1 \color{red}常见考点1:结点数总度数1 常见考点1:结点数总度数1 结点的度 ―― 结点有几个孩子(分支) 树的度 ―― 各结点的度的最大值 m叉树 ―― 每个结点最多只能有m个孩子的树 常见考点 2 : 度为 m 的树、…

MySQL安装以及体系结构

1.简述mysql体系结构 MySQL 最重要、最与众不同的特性是它的存储引擎架构&#xff0c;这种架构的设计将查询处理 &#xff08;Query Processing&#xff09;及其他系统任务&#xff08;Server Task&#xff09;和数据的存储/提取相分离。这种 处理和存储分离的设计可以在使用时…

【简单认识LVS及LVS-NAT负载均衡群集的搭建】

文章目录 一、LVS群集简介1、群集的含义2、性能扩展方式3、群集的分类4、负载均衡群集架构1、负载均衡的结构 5、三种负载调度工作模式1、NAT模式2、TUN模式3、DR模式 二、LVS虚拟服务器1、Linux Virtual Server简介2、启用LVS虚拟服务3、LVS调度算法&#xff08;1&#xff09;…

YoloV5/YoloV7改进---注意力机制:高斯上下文变换器GCT,性能优于ECA、SE等注意力模块 | CVPR2021

目录 1.GCT介绍 实验结果 2.GCT引入到yolov5 2.1 加入common.py中&#xff1a; 2.2 加入yolo.py中&#xff1a; 2.3 yolov5s_GCT.yaml 2.4 yolov5s_GCT1.yaml 1.GCT介绍 论文&#xff1a;https://openaccess.thecvf.com/content/CVPR2021/papers/Ruan_Gaussian_Context_Tra…

Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean

Spring源码系列文章 Spring源码解析(一)&#xff1a;环境搭建 Spring源码解析(二)&#xff1a; 目录 一、Spring源码基础组件1、bean定义接口体系2、bean工厂接口体系3、ApplicationContext上下文体系 二、AnnotationConfigApplicationContext注解容器1、创建bean工厂-beanFa…

计算机网络概述(三)

常见的计算机网络体系结构 OSI体系结构&#xff1a; 物理层→数据链路层→网络层→运输层→会话层→表示层→应用层 TCP/IP体系结构&#xff1a; 网络接口层→网际层→运输层→应用层 一般用户的设备都有TCP/IP协议用于连接因特网&#xff0c;TCP/IP的网络接口层并没有规定使用…

Linux基础+html和script一些基本语法

文章目录 linux 基础名字含义指令 html 语法style 样式属性样式标签属性颜色margin 边距ransform 旋转角度重复样式opacity 透明度div 方块元素box-shadow 阴影属性浮动 script获取节点onclick 点击触发setTimeout 定时器利用定时器实现 动画效果 javascript强弱语言区分parseI…

简单详细的MySQL数据库结构及yum和通用二进制安装mysql的方法

目录 mysql体系结构mysql的安装方法一&#xff0c;yum安装1&#xff0c;首先下载一个网络源仓库&#xff1a;2&#xff0c;然后安装 mysql-community-server3&#xff0c;启动mysqld 服务4&#xff0c;然后登录数据库5&#xff0c;初次登录要设置密码&#xff0c;而且不能太简单…

小型电子声光礼花器电子烟花爆竹电路设计

节日和庆典时燃放礼花&#xff0c;其绚丽缤纷的图案&#xff0c;热烈的爆炸声、欢乐的气氛&#xff0c;能给人们留下美好的印象&#xff0c;但有一定的烟尘污染和爆炸危险隐患。本电路可以模拟礼花燃放装置&#xff0c;达到声型兼备的效果&#xff0c;给人们在安全、环保的环境…

redis rehash

dict结构 dictEntry即键值对&#xff0c;每个桶就是dictEntry连接的链表 typedef struct dictEntry {void *key;union {void *val; // 自定义类型uint64_t u64;int64_t s64;double d;} v;struct dictEntry *next; } dictEntry;数据真正指向的地方 typedef struct dictht {di…

京东网站登录二维码显示不出来

环境&#xff1a; 360急速浏览器 Win10专业版 问题描述&#xff1a; 京东网站登录二维码显示不出来 解决方案&#xff1a; 1.打开安全卫士 2.功能大全找到断网急救箱 3.全面诊断一下有问题修复一下&#xff0c;重启浏览器解决