万物的算法日记|第二天

news2024/11/26 14:55:19

笔者自述:

一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结,因为后半年也该找实习了,所以每日的算法题要进行恶补,勤能补拙,因此有了这一个算法日记系列;

必读: 大佬你好,感谢您的阅读,这篇文章是我的算法笔记,方便我每日回顾;
为了不耽误您的时间,我把本篇日记的考点方向和算法知识总结列出来,如果对您有需要要就向下继续阅读

也希望对您有帮助,和您一起通关算法!致谢

请添加图片描述
算法语言:java
题目来源:力扣–书本–图解算法数据结构,可以在力扣中搜索相关题名找到更多解法和大神方法
本文知识点汇总:

  1. ArrayList和LInked两个列表的区别
    底层不同:ArrayLIst和LInked: ArrayList底层是数组实现的,可以快速访问元素,而LinkedList需要从头或尾部进行遍历;对于删除元素时,LInkedList可以更快的删除元素,而ArrayLIst相对麻烦。针对不同情况进行选择;
    适用场景不同: 对于频繁增删的使用LinkedLIst;对于随机访问和数据量较小的知识及顺序访问列表中的元素,使用ArrayList、

  2. 位运算
    关于异或的规则:a^a =0, a^0 = a,;同时满足异或交换律,可以用于三次异或来进行交换两个数的值abc =acb

  3. Arrays中自带求和和排序方法
    使用Arrays内置的求和公式,Arrays.stream(inteferface{}).sum() 求和 ,Arrays.sort() 排序 但是相对时间复杂度会上升


  4. 栈: 什么是栈? 先进后出,一种线性数据结构。
    为什么链表可以用来表示栈 ??链表表示栈可以动态地添加和删除元素,更加灵活和强大,适合频繁的删除和添加元素场景。LInkedList和ArrayLIst都适合来表示栈,一般常用LinkedList来表示栈,ArrayList底层是一个数组,LinkedList底层是链表,更适合一些。同时链表中自带的方法,例如:addFirst,offerFirst,removeLast,pollLast方法组合可以很好的将元素push和pop进出栈。就时间复杂度而言,栈的入栈push和出栈pop操作都是O(1),同时使用两个栈来进行相互辅助,栈a作为存放元素,栈b作为存放非严格排序的元素,可以找到min值,就在栈b中

  5. 队列
    什么是队列?先进先出,一种特殊的线性表
    使用两个栈来实现队列的思路:两个栈S1和S2,一个用于插入元素(入队操作),一个用于删除元素(出队操作)

详细可针对具体题目具体分析~~

文章目录

  • 杨辉三角
  • 缺失数字
  • 剑指Offer09.用两个栈实现队列
  • 剑指Offer30. 包含min函数的栈

杨辉三角

在这里插入图片描述

class Solution {
   public List<List<Integer>> generate(int numRows) {
       List<List<Integer>> list = new ArrayList<>();
       List<Integer> res = new ArrayList<>();
       // 排除为0条件
       if(numRows == 0) return list;
       //将第一行添加到列表中
       res.add(1);
       list.add(res); 
       //从第二行开始进行遍历循环 i表示行数,j表示索引位置
       for(int i =1;i<numRows;i++){
           List<Integer> row = new ArrayList<>();
           //首先在该行第一个位置加入1
           row.add(1);
           //因为 该行增添了一个1,该数向后挪动了一位,所以该数和为上一层的j和j+1组成
           for(int j=0;j<list.get(i-1).size()-1;j++){
               row.add(list.get(i-1).get(j)+list.get(i-1).get(j+1));
           }
           //在该行最后一位添上1,一位我的j的范围是取到倒数第二位
           row.add(1);
           list.add(row);
       }
       return list;
    }
}

思路 && 学到的知识点:

  1. 首先是列表形式的选择,分别是ArrayList和LinkedList;
    区别:ArrayList 底层是数组实现,利于快速访问元素,LinkedList需要从头或者尾部开始遍历,没有ArrayList方便,但是在删除元素时,LInkedList更方便;、
    使用场景:对于频繁进行插入删除用lInkedList,对于随机访问,或者数据量较小的且只是顺序访问列表中的元素,使用ArrayList。
  2. 思路可以一步一步分析给出的代码,写的很清晰了步骤

缺失数字

在这里插入图片描述
代码:

 // 位运算 
   public int missingNumber(int[] nums){
        int xor =0;
        for(int i=0;i<nums.length;i++){
            xor ^= nums[i] ^i;
        }
        return xor^ nums.length;
    }
//求和解法+
    public int missingNumber(int[] nums){
        int sum =0;
        int length = nums.length;
        int sum1=Arrays.stream(nums).sum();
        for(int i =1;i<=length;i++){
            sum +=i;
        }
        return sum-sum1;
    }

学到的知识:

  1. 位运算操作:异或运算: 相同的数异或等于0;一个数和0异或为它自己;a ^ b ^ c = a ^ c ^b 具有交换律的性质
  2. 使用Arrays内置的求和公式,Arrays.stream(inteferface{}).sum() 求和

剑指Offer09.用两个栈实现队列

在这里插入图片描述
代码:

class CQueue {
    LinkedList<Integer> A,B;
    public CQueue() {
        A = new LinkedList<Integer>();
        B = new LinkedList<Integer>();
    }
    public void appendTail(int value) {
        A.addLast(value);
    }
    public int deleteHead() {
        if(!B.isEmpty()) return B.removeLast();
        if(A.isEmpty()) return -1;
        while(!A.isEmpty()){
            B.addLast(A.removeLast());
        }
        return B.removeLast();
    }
}

学到的知识:

  1. 栈: 什么是栈? 先进后出,一种线性数据结构。
    为什么链表可以用来表示栈 ??链表表示栈可以动态地添加和删除元素,更加灵活和强大,适合频繁的删除和添加元素场景。LInkedList和ArrayLIst都适合来表示栈,一般常用LinkedList来表示栈,ArrayList底层是一个数组,LinkedList底层是链表,更适合一些。同时链表中自带的方法,例如:addFirst,offerFirst,removeLast,pollLast方法组合可以很好的将元素push和pop进出栈。
  2. 队列: 什么是队列?先进先出,一种特殊的线性表
    使用两个栈来实现队列的思路:两个栈S1和S2,一个用于插入元素(入队操作),一个用于删除元素(出队操作)
    流程: 在插入元素时,将元素push到s1栈中,在删除元素时,将s1中的所有元素都弹出来到s2中,然后将s2的栈顶元素出栈并返回,当s1和s2都为空时,则说明队列是空了

剑指Offer30. 包含min函数的栈

在这里插入图片描述
代码:

    //难点:如何降低时间复杂度,因为 寻找最小元素 需要遍历整个栈,时间复杂度是O(n),
    //因为普通栈的出栈和入栈的复杂度是 O(1),所以可以借助栈来进行降低时间复杂度
    Stack<Integer> A,B;
    public day6_13_4(){
        A = new Stack<>();
        B = new Stack<>();
    }
    public void push(int x){
        A.add(x);
        if(B.empty() || B.peek() >= x){
            B.add(x);
        }
    }
    public void pop(){
        if (A.pop().equals(B.peek())){
            B.pop();
        }
    }
    public int top(){
        return A.peek();
    }
    public int min(){
        return B.peek();
    }

学到的知识点:

  1. 就时间复杂度而言,栈的入栈push和出栈pop操作都是O(1),同时使用两个栈来进行相互辅助,栈a作为存放元素,栈b作为存放非严格排序的元素,可以筛选出。

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

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

相关文章

JavaSE进阶——玩转IO流

文章目录 前言一、File类介绍1、概念引入2、实际应用2.1 操作文件2.2 操作文件夹 二、IO流介绍三、字符流1、读文件1.1 一次读一个1.2 一次读多个&#xff0c;使用char数组去装 2、写文件2.1 一次写一个2.2 一次写完&#xff0c;使用字符数组 3、文件复制3.1 综合应用3.2 使用缓…

论文解读:ExamPle:用于预测植物小分泌肽的可解释的深度学习框架

ExamPle: explainable deep learning framework for the prediction of plant small secreted peptides 期刊&#xff1a;Bioinformatics 影响因子&#xff1a;6.931 中科院分区&#xff1a;小类数学与计算生物2区 出版日期&#xff1a;2023年3月10日 Github:https://gith…

Seata客户端的启动过程 学习记录

Seata客户端的启动过程 1.自动装配4个配置类 将在SpringBoot启动时往容器中添加4个类 1. 自动配置类 SeataAutoConfiguration SeataAutoConfiguration将会往容器中添加两个bean failureHandler 事务处理失败执行器globalTransactionScanner failureHandler failureHandle…

03 表达关系的术语

文章目录 表达关系的术语关联关联的语义表达(6点) 泛化细化(也称为实现)依赖例题 UML 基本关系的一般用法① 模型化简单依赖②模型化单继承③模型化结构关系例题 表达关系的术语 关联 定义&#xff1a;关联是类目之间的结构关系&#xff0c;描述了一组具有相同结构、相同语义…

【MySQL数据库一】MySQL数据库初体验

MySQL数据库初体验 1.数据库基本概念1.1 数据Data1.2 表1.3 数据库1.4 数据库管理系统1.5 数据库系统 2.数据库的发展3.主流的数据库介绍3.1 SQL Server&#xff08;微软公司产品&#xff09;3.2 Oracle &#xff08;甲骨文公司产品&#xff09;3.3 DB2&#xff08;IBM公司产品…

安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等【二】

安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等【一】 前面分享了这篇帖子&#xff0c;很多友友希望更新下新机型的基带替换方法。今天对其中做一些补充说明。由于安卓机型跨版本幅度较大。有的机型从出厂安卓8有可能官方目前已经更新到安卓12 13等等。所以任何的教…

每天五分钟机器学习:如何确定梯度下降中的学习率?

本文重点 学习率是梯度下降算法中的一个重要参数,它控制着每次迭代中参数的更新幅度,因此学习率的大小直接影响着算法的收敛速度和精度。在实际应用中,如何选择合适的学习率是一个非常重要的问题。 手动调整法 最简单的方法是手动调整学习率。我们可以根据经验或者试错的…

sealos 五年磨一剑——云操作系统正式发布

这是计划的一部分 这是一个宏伟的计划&#xff0c;漫长且有趣。。。 2018 年的一个晚上&#xff0c;我写下了 sealos 第一行代码&#xff0c;当时仓库命名 “kubeinit”&#xff0c;后一想格局太小&#xff0c;我不可能只做一个安装 kubernetes 的事&#xff0c;安装只是计划…

不知道测试什么?这些是你需要知道的软件测试类型和常识

有多少软件测试类型呢? 我们作为测试人员了解很多种不同的软件测试类型&#xff0c;例如功能测试(Functional Test)、非功能测试、自动测试、敏捷测试、以及它们的各种子类型. 尽管在我们的测试过程中会接触很多种测试类型, 或者听说过某些测试类型&#xff0c;但是很少人敢说…

小姐姐们,一起学数据分析

&#x1f496; 亲爱的女生们&#xff0c;听我说&#xff01;数据分析&#xff0c;给你的未来注入浪漫与激情&#xff01;&#x1f496; 嗨&#xff0c;小姐姐们&#x1f46d;&#xff0c; 我想和你们分享一个令人兴奋的话题——数据分析&#xff01;或许你们会觉…

Liunx系统重修

Liunx中以“树”结构的形式来管理文件和文件夹的&#xff01;

ISP下载原理分析

STM32的启动方式&#xff0c;系统存储器启动就是通过ISP下载 ISP简介 ISP下载是指可以通过串行外设&#xff0c;直接将程序下载Flash中&#xff0c;然后自动运行程序的启动方式。 ISP的时候需要用到bootloder(自举程序)&#xff0c;bootloader存储在STM32内部的自举ROM存储器…

webpack踩坑

因为电脑重新装了系统 所以很多环境都需要配置 1.首先去node.js官网下载了node&#xff0c;node下载后对应的npm版本也会自动下载好 2.想要成功跑通项目&#xff0c;还需要下载webpack 全局安装webpack npm -i webpack -Dnpm install webpack-cli -g但一直在报错 查看webpac…

基于Java毕业生就业信息统计系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

2023互联网Java高级工程师1080道面试题(附答案)分享

Java 面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。现如今&#xff0c;Java 面试的本质就是八股文&#xff0c;把八股文面试题背好&#xff0c;面试才有可能表现好。…

python字符串格式化控制数值经度

python字符串格式化通过占位符拼接演示了字符串格式化拼接的方法 但是大家应该有注意到 我们的 8.70 就变成了 8.700000 那么 我们就需要对浮点数 做一个经度控制 我们先编写如下代码 dom1 110; dom2 1234.1234567; print(dom1) print(dom2)运行结果如下 我们定义了一个整…

【RuoYi-Cloud-Plus】学习笔记 07 - Sentinel(二)Node ProcessorSlotChain 总览与知识整理

文章目录 前言参考目录版本说明学习笔记1、Sentinel 架构图2、Node2.1、入口节点 EntranceNode2.2、链路节点 DefaultNode2.3、簇点 ClusterNode2.4、统计节点 StatisticNode3、Slot Chain3.1、DefaultSlotChainBuilder3.1.1、Slot 排序的实现3.1.2、SPI 文件读取3.2、NodeSele…

Java并发工具之ThreadLocal

一、ThreadLocal 简介 1. ThreadLocal 是什么&#xff1f; ThreadLocal 字面意思是本地线程&#xff0c;其实更准确来说是线程局部变量&#xff0c;线程类 Thread 有个变量叫做 threadLocals&#xff0c;其类型就是ThreadLocal.ThreadLocalMap 类型&#xff0c;他其实不是一个…

回忆童年游戏,完美利用Python制作飞机大战(爷青回~)

名字&#xff1a;阿玥的小东东 学习&#xff1a;python、C/C 博客链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 pygame包的安装 添加python环境变量 创建飞机大战窗口 飞机照片 将变量及函数抽取出来 添加多…

LeetCode:31. 下一个排列

31. 下一个排列 1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果 1&#xff09;题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1…