day73【代码随想录】二刷链表

文章目录

  • 前言
  • 一、环形链表||(力扣142)
  • 二、寻找重复数(力扣287)
  • 三、缺失的第一个正数(力扣41)
  • 每日一题day73:等差子数组(力扣1630)


前言

1、等差子数组
2、寻找重复数
3、缺失的第一个正数
4、等差子数组


一、环形链表||(力扣142)

在这里插入图片描述
分析:
快慢指针 快指针一直一次走两步 慢指针一次走一步
先判断是否有环 快慢指针是否会相等
在有环的基础上,去找入口位置

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;

        while(fast!=null && fast.next!=null){
            //先判断是否有环
            slow = slow.next;
            fast = fast.next.next;
            if(slow==fast){//有环
                ListNode index1 = fast;
                ListNode index2 = head;
                //找入口 
                while(index1!=index2){
                    index1 = index1.next;
                    index2 = index2.next;
                }
                return index1;
            }
        }
        return null;
    }
}

二、寻找重复数(力扣287)

在这里插入图片描述
分析:将其转化为环形链表||
大佬题解

class Solution {
    public int findDuplicate(int[] nums) {
        int res = 0;
        int slow = 0;
        int fast = 0;
        slow = nums[slow];
        fast = nums[nums[fast]];
        //由题意得一定会出现环
        while(slow!=fast){
            slow = nums[slow];
            fast = nums[nums[fast]];
        }
        //此时slow和fast相遇
        //寻找相遇的入口
        int index1 = 0;
        int index2 = slow;
        while(index1!=index2){
            index1 = nums[index1];
            index2 = nums[index2];
        }
        res = index1;
        return res;
    }
}

三、缺失的第一个正数(力扣41)

在这里插入图片描述
分析:

如果没有额外的时空复杂度要求,那么就很容易实现:
将数组所有的数放入哈希表,随后从 1开始依次枚举正整数,并判断其是否在哈希表中;
我们可以从 1 开始依次枚举正整数,并遍历数组,判断其是否在数组中。
如果数组的长度为 N,那么第一种做法的时间复杂度为 O(N),空间复杂度为 O(N);第二种做法的时间复杂度为 O(N2),空间复杂度为 O(1)。但它们都不满足时间复杂度为 O(N) 且空间复杂度为 O(1)。

力扣题解

在这里插入图片描述
==注意:==特别需要注意第二步:

    for(int i=0;i<nums.length;i++){
        if(nums[i]<=n && nums[i]>0){
            nums[nums[i]-1] = -1*nums[nums[i]-1];
        }
    }

这样写的问题所在在于: 例如 3,4,-1,1
经过第一步后变为:3,4,5,1;
按上述代码执行第二步后:3,4,-5,-1;
问题在于变为-1后 3无法标记为-3, 因此要用取绝对值的方式

    for(int i=0;i<nums.length;i++){
        int num = Math.abs(nums[i]);
        if(num<=n){
            nums[num-1] = -Math.abs(nums[num-1]);
        }
    }
class Solution {
public int firstMissingPositive(int[] nums) {
        int n = nums.length;
        for(int i=0;i<nums.length;i++){
            if(nums[i]<=0){
                nums[i] = n+1;
            }
        }
        for(int i=0;i<nums.length;i++){
            int num = Math.abs(nums[i]);
            if(num<=n){
                nums[num-1] = -Math.abs(nums[num-1]);
            }
        }
        for(int i=0;i<n;i++){
            if(nums[i]>0){
                return i+1;
            }
        }
        return n+1;
    }
}

每日一题day73:等差子数组(力扣1630)

在这里插入图片描述
分析:
简单模拟 数据量不大 暴力求解不会超时
截取每一段数组 排序 依次判断差值是否相等

class Solution {
    public List<Boolean> checkArithmeticSubarrays(int[] nums, int[] l, int[] r) {
        //
        int length = l.length;
        Boolean[] res = new Boolean[length];
        Arrays.fill(res,true);

        for(int i=0;i<length;i++){
            int left = l[i];
            int right = r[i];
            int[] curArray = Arrays.copyOfRange(nums,left,right+1);
            Arrays.sort(curArray);
            int gap = curArray[1]-curArray[0];
            for(int j=2;j<curArray.length;j++){
                int diff = curArray[j]-curArray[j-1];
                if(diff!=gap){
                    res[i] = false;
                    break;
                }
            }
        }
        return Arrays.asList(res);
    }
}

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

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

相关文章

ThreeJS-纹理(十)

关键代码&#xff1a; const textureLoader new THREE.TextureLoader(); //纹理加载器加载图片 const docColorLoader textureLoader.load(static/1.webp) // let color new THREE.Color(Math.random(), Math.random(), Math.random()); const cubeMaterial new THREE.Mesh…

法规标准-GB/T 39901标准解读(2021版)

GB/T 39901是做什么的&#xff1f; GB/T 39901全名为乘用车自动紧急制动系统(AEBS)性能要求及试验方法&#xff0c;其中主要对AEBS的功能要求、性能要求及测试要求进行介绍 一般要求 1.安装有自动紧急制动系统的车辆应安装符合GB 21670-2008要求的防抱制动系统 2.AEBS的电磁…

近世代数 笔记和题型连载 第七章(阿贝尔群和循环群)

文章目录基础概念1.阿贝尔群2.循环群3.有限循环群4.元素的阶5.无限循环群相关题型1.判断一个代数系统的代数结构2.判定一个群是否是循环群3.判定一个群是否是循环群4.循环群的生成元有关问题5.判定元素的阶6.判定元素的阶7.判定元素的阶8.求给定循环群的所有子群9.求给定循环群…

七. MySQL 其它优化相关

目录一. 数据库问题排查流程二. 表连接驱动表与被驱动表Nested Loop Join 与小表驱动大表JoinBuffer 连接缓冲区Index Nested-Loop Join 索引嵌套循环连接Batched Key Access join 批量的key访问连接Block Nested-Loop Join 缓存块嵌套循环连接三. 半连接in 与 existssemi-join…

Vue 04 - Vue模板语法

目录 介绍 Mustache 插值语法 Attribute指令语法 代码演示 运行效果 介绍 Vue.js 使用了基于 HTML 的模板语法&#xff0c;允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML&#xff0c;所以能被遵循规范的浏览器和 HTML 解析器解…

PCB模块化设计10——PCI-E高速PCB布局布线设计规范

目录PCB模块化设计10——PCI-E高速PCB布局布线设计规范1、PCI-E管脚定义2、PCI-E叠层和参考平面3、 PCB设计指南1、阻抗要求2、线宽线距3、长度匹配4、走线弯曲角度5、测试点、过孔、焊盘6、AC去耦电容放置方法7、金手指和连接器的注意事项8、其他的注意事项PCB模块化设计10——…

STM32学习笔记(一)基础知识

文章目录一、什么是单片机&#xff1f;二、STM系列单片机命名规则三、STM32F103C8T6单片机简介四、标准库与HAL库区别五、通用输入输出端口GPIO六、复位和时钟控制&#xff08;RCC&#xff09;七、时钟八、中断和事件九、定时器一、什么是单片机&#xff1f; 单片机和PC电脑相比…

SpringBoot的多环境配置详解(上)——文件配置项版

SpringBoot不同环境加载不同配置文件 - resource & profile 文章目录SpringBoot不同环境加载不同配置文件 - resource & profile1、 profile多配置文件2、 profile单配置文件3、maven的profiles策略4、spring.profiles.activeprofiles.active用法1、 profile多配置文件…

健身房训练计划—背部

杠铃屈腿硬拉&#xff08;臀&#xff0c;大腿&#xff09; 动作要领&#xff1a; 1&#xff0c;站距和肩等宽&#xff0c;脚尖微微外八&#xff0c;拉的时候把杆贴近小腿&#xff0c;身体成45度&#xff08;头背腰成45度&#xff09;。 2&#xff0c;发力的时候腿用力向上蹬&am…

IOC 相关内容

IOC 相关内容4&#xff0c;IOC相关内容4.1 bean基础配置4.1.1 bean基础配置(id与class)4.1.2 bean的name属性步骤1&#xff1a;配置别名步骤2:根据名称容器中获取bean对象步骤3:运行程序4.1.3 bean作用范围scope配置4.1.3.1 验证IOC容器中对象是否为单例验证思路具体实现4.1.3.…

三个月从功能测试进阶到自动化测试,涨薪5k?你在想啥呢?

一、自动化测试要学多久能学会&#xff1f; 兄弟&#xff0c;老实说如果你现在上班&#xff0c;之前主要在做功能测试&#xff0c;或者编程基础比较弱的话&#xff0c;三个月够呛。 如果你是脱产学习&#xff0c;每天能保持6&#xff5e;8小时学习时间的话&#xff0c;可以。…

【综】A review of bicycle-sharing service planning problems

A review of bicycle-sharing service planning problems 共享单车服务规划问题综述 article{ZHOU2022608, title {Review of bike-sharing system studies using bibliometrics method}, journal {Journal of Traffic and Transportation Engineering (English Edition)}, v…

12.0 自定义SystemUI下拉状态栏和通知栏视图(十九)之悬浮通知布局

1.前言 在进行12.0的系统rom产品定制化开发中,在12.0中针对systemui下拉状态栏和通知栏的定制UI的工作开发中,原生系统的下拉状态栏和通知栏的视图UI在产品开发中会不太满足功能, 所以根据产品需要来自定义SystemUI的下拉状态栏和通知栏功能,首选实现的就是下拉通知栏左滑删…

是面试官放水,还是企业实在是缺人?这都没挂,字节原来这么容易进...

“字节是大企业&#xff0c;是不是很难进去啊&#xff1f;”“在字节做软件测试&#xff0c;能得到很好的发展吗&#xff1f;一进去就有9.5K&#xff0c;其实也没有想的那么难”直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾讯…

基于springboot学生信息管理系统

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

JAVA ---数据类型

&#xff08;一&#xff09;Java的标识符与关键字 现实世界&#xff0c;所有东西都有属于自己的名字&#xff0c;从而方便分类和区别其他事物。在程序中&#xff0c;常常用一个记号对变量、数组、方法和类等进行标识&#xff0c;这个记号就叫标识符&#xff08;名字&#xff09…

华为OD机试用java实现 -【最优调度策略】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:最优调度策略 题目 在通信系…

JavaScript核心高级内容复习3

文章目录对象的创建模式继承模式详细介绍Object构造函数模式对象字面量工厂模式自定义构造函数模式构造函数原型的组合模式继承模式--原型链继承继承模式--借用构造函数继承继承模式--组合继承对象的创建模式 Object构造函数模式var obj {}; obj.name Tom obj.setName func…

【软件设计师04】计算机网络

计算机网络 1. OSI/RM七层模型 层次名称主要功能主要设备及协议7应用层实现具体的应用功能POP3、FTP、HTTP、Telnet、SMTP、DHCP、TFTP、SNMP、DNS6表示层数据的格式与表达、加密、压缩5会话层建立、管理和终止会话4传输层端到端的连接TCP、UDP3网络层分组传输和路由选择三层…

Matplotlib库入门

Matplotlib库的介绍 什么是Matplotlib库&#xff1f; Matplotlib是一个Python的数据可视化库&#xff0c;用于绘制各种类型的图表&#xff0c;包括线图、散点图、条形图、等高线图、3D图等等。它是一个非常强大和灵活的库&#xff0c;被广泛用于数据科学、机器学习、工程学、…