(数据结构代码,总结,自我思考)=> { return 个人学习笔记; } 【To be continued~】

news2024/9/20 2:44:43

俗话说 “学而不思则罔”,是时候复习和整理一下自己先前的学习历程了!

Chapter-One

《BinarySearch》

public static int binarySearch (int[] a, int target) {
        int i = 0, j = a.length - 1;
        
        while (i <= j) {
            int m = (i + j) >>> 1; // 求中位数,但是是用位运算符的方式,相对于除法,这种方式更加高效
           if (target < a[m]) {
               j = m - 1; // 如果找到的目标数小于中位数,则在中位数的左边开始找起
           } else if (a[m] < target){
               i = m + 1; // 如果找到的目标数大于中位数,则在中位数的右边开始找起
           } else {
               return m; // 找到则直接返回改数值在数组中的索引的值
           }
        }
        return -1;  /* 没有找到则直接返回-1,当然这里选择抛出异常(并提示异常信息,个人觉得对用户体验更加好 如: )  throw new RuntimeException("目标数值不在数组中"); */
    }
自问自答
   问:为什么while的条件中 i <= j 而不是 [instead of] i < j ?
   答:1. 首先,顾名思义,前面的条件会比后面的条件多执行一次。
      2. 那如果当 target == i == j 的时候呢,那少去的这一次就会因为不满足while条件直接退出循环了,然后放回直接没有找到的该目标值。因此为了避免这种情况的发生,我们应该加上等于号。

《DynamicArray》

import java.util.Arrays;
import java.util.Iterator;
import java.util.function.Consumer;
import java.util.stream.IntStream;

public class DynamicArray implements Iterable<Integer> {
    private int size = 0; // 数组中存储元素的个数
    private int capacity = 8; // 数组的容量大小
    private int[] array = {};


    public void addLast(int element) { // 在数组的尾部添加元素
//        array[size] = element;
//        size++;   the original thought
        add(size,element);
    }

    public void add(int index, int element) {
        checkAndGrow(); // 判断需要动态扩容的模式
        if (index >=0 && index < size) {
            System.arraycopy(array, index,
                    array, index + 1, size - index); // 使用java自带的内置API,进行数组的复制
        } else if (index < 0) {
            throw new RuntimeException("index typing wrong, retry again please!");
        }
        array[index] = element;// 指定的位置对元素进行添加
        size++; // 更新数组元素个数
    }

    private void checkAndGrow() {
        //check
        if (size == 0) {
            array = new int[capacity];// 等于0时,默认初始化的容量
        } else if (size == capacity) {
            capacity += capacity >> 1; // 扩容1.5倍
            int[] newArray = new int[capacity];
            System.arraycopy(array, 0,
                    newArray, 0, size); // 数组复制
            array = newArray;
        }
    }

    public int get(int index) { // 获取数组中指定的元素
        return array[index];
    }

    public void foreach(Consumer<Integer> consumer) { //遍历数组元素
        for (int i = 0; i < size; i++) {
            consumer.accept(array[i]);
        }
    }

    @Override
    public Iterator<Integer> iterator() { // 迭代器
        return new Iterator<Integer>() {
            int i = 0;
            @Override
            public boolean hasNext() { // 判断是否有下一个元素
                return i < size;
            }

            @Override
            public Integer next() { // 返回当前元素,并且指针向后面移动一位
                return array[i++];
            }
        };

    }


    public IntStream stream() { // 将数组转成int字节流
        return IntStream.of(Arrays.copyOfRange(array,0,size)); //[0,size)
    }


    public int remove(int index) { //移除指定的 范围:[0,size)
        int removed = array[index];
        if (index < size - 1) {
                System.arraycopy(array, index + 1,
                        array, index, size - index - 1);
            }
        size--;
        return removed;
    }
}
自问自答
 	问:箭头函数在这里的用法?
 	答 1. foreach方法中定义的参数,类似一个集合的作用,把数组中所有的遍历之后的元素都存起来了
 	   2. 因此在调用的阶段,我们直接传一个(whatever)形参,然后在 {代码块中},我们可以对该参数做任何我们想做的事情或者实现想要实现的功能。
 	   3. 相当于是,内部收集到了这个数组的值,但是这个值有什么用途,留给调用这个方法的用户去决定了。

在这里插入图片描述
example

@Test
    public void test2() {
        DynamicArray dynamicArray = new DynamicArray();
        AtomicInteger sum = new AtomicInteger(); // 把变量设置为原子状态的Integer包装类型
        dynamicArray.addLast(1);
        dynamicArray.addLast(2);
        dynamicArray.addLast(3);
        dynamicArray.addLast(4);

        dynamicArray.forEach((element)->{
            sum.addAndGet(element);// 对element的所有元素进行相加, 这里返回值是int,但是我选择不接收。
        });

        System.out.println(sum.get()); //输出累加的结果!
    }

运行结果

未完待续······

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

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

相关文章

小红书电商运营实战课,从0打造全程实操(65节视频课)

课程内容&#xff1a; 1.小红书的电商介绍 .mp4 2.小红书的开店流程,mp4 3.小红书店铺基础设置介绍 ,mp4 4.小红书店铺产品上架流程 .mp4 5.客服的聊天过程和子账号建立 .mp4 6.店铺营销工具使用和后台活动参加 .mp4 7.小红书产品上架以及拍单教程,mp4 8.小红书如何选品…

javaWeb项目-智慧餐厅点餐管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JavaScript Java…

UltraScale+的40G/50G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图二、模块说明三、上板3.1、发送端3.1、接收端 四、总结 前言 上文介绍了10G/25G Ethernet Subsystem IP核使用&#xff0c;本文将在此基础上介绍40G/50G Ethernet Subsystem IP核的使用&#xff0c;总体区别不大。 一、设计框图 由于40G以太网需要…

Jetson nx 外接OLED屏幕

40 针 GPIO 引脚 GPIO引脚可以用作输入或输出端口&#xff0c;它们提供了一个数字电平以使用户在外界设备上进行控制或读取。Jetson TX2 NX共有198个GPIO引脚&#xff0c;分为三个不同的管脚组&#xff1a;J1、J21和J22。每个管脚组都具有数字输入/输出和PWM功能。 以下是 TX2…

获取AngusTester应用免费许可

第一步、进入晓蚕云官网私有化部署&#xff0c;滑动到底部下载与安装&#xff0c;点击获取许可。 第二步、在获取许可申请页面填写申请信息。 注意&#xff1a;MAC地址为您安装应用服务器对应MAC地址&#xff0c;MAC地址错误会导致安装失败。 在常见的操作系统中&#xff0c;查…

Error in render: TypeError: Cannot read properties of undefined (reading‘‘)

报错内容 报错解释&#xff1a;这个错误在渲染过程中尝试读取一个未定义&#xff08;undefined&#xff09;对象的某个属性时发生了TypeError。具体来说&#xff0c;是尝试读取一个值为undefined的对象的某个属性&#xff0c;但该属性不存在&#xff0c;因此无法读取。解决过程…

【面试经典 150 | 二叉搜索树】验证二叉搜索树

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;中序遍历方法二&#xff1a;递归 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及…

国产信创办公软件(流版式软件)厂家汇总以及国产信创外设汇总

国产信创办公软件&#xff08;流版式软件&#xff09;厂家汇总以及国产信创外设汇总。 国产信创办公软件&#xff08;流版式软件&#xff09;厂家汇总 在信创背景下&#xff0c;国内流版式软件的发展呈现出蓬勃的态势。信创&#xff0c;即信息技术应用创新产业&#xff0c;旨在…

【C++】日期类Date(详解)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 日期类 日期类实现地图 获取某年某月的天数&#xff1a;GetMonthDay 检查日期合法&#xff0c;构造函数&#xff0c;拷贝构造函数&#xff0c;赋值运算符重载及析构函数…

【Qt】探索Qt框架:跨平台GUI开发的利器

文章目录 1. Qt框架概述1.1. Qt框架的优点1.2. Qt框架支持的系统1.3. Qt开发环境 2. 搭建 Qt 开发环境2.1. Qt SDK 的下载和安装2.2. 新建项目: 3. Qt 框架内容简介总结 在当今软件开发领域&#xff0c;跨平台性和用户界面的友好性是至关重要的。而Qt框架作为一款跨平台的C图形…

<计算机网络自顶向下> TCP拥塞

目录 TCP拥塞控制机制 TCP拥塞感知 TCP速率控制方法 TCP拥塞控制和流量控制的联合动作 TCP拥塞控制策略 TCP吞吐量 TCP公平性 TCP拥塞控制机制 端到端的拥塞控制机制 路由器不向主机提供有关拥塞的反馈信息 路由器负担较轻 符合网络核心简单的TCP/IP架构原则 端系统根据自…

【github主页】优化简历

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

浅谈命理学的男女婚姻篇

对于中国人来说&#xff0c;八字预测已成为生活中不可缺少的组成部分&#xff0c;不懂八字预测&#xff0c;就不会真正了解中国的传统文化。八字预测经历几千年的风风雨雨&#xff0c;是一种古老的中国命理学&#xff0c;通过生辰八字的天干地支的组合&#xff0c;可以推测一个…

[阅读笔记21][RA-CM3]Retrieval-Augmented Multimodal Language Modeling

这篇论文是meta联合斯坦福在23年4月发表的论文&#xff0c;提出了一个使用外部知识检索增强的多模态模型。 这篇模型提出的RA-CM3模型是第一个能够检索并生成图像文本的多模态模型&#xff0c;在图像文本生成任务上优于现有的多模态模型&#xff0c;同时使用更少的训练量。 RA-…

模型 框架效应

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。部分真相不等于真相。 1 框架效应的应用 1.1 框架效应在营销策略上的应用 亚洲航空公司面临的挑战是如何在竞争激烈的航空市场中吸引更多的顾客&#xff0c;并提高机票的预订率。这家低成本航空公司…

2.Vue简介

Vue简介 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;V…

Scala的函数至简原则

对于scala语言来说&#xff0c;函数的至简原则是它的一大特色。下面让我们一起来看看分别有什么吧&#xff01; 函数至简原则&#xff1a;能省则省&#xff01; 初始函数 def test(name:String):String{return name }1、return可以省略&#xff0c;Scala会使用函数体的最后一…

排序算法集合

912. 排序数组 趁着这道题总结下排序方法 1.快速排序 算法描述 1.从数列中挑出一个元素&#xff0c;称为"基准"&#xff08;pivot&#xff09;&#xff0c; 2.重新排序数列&#xff0c;所有比基准值小的元素摆放在基准前面&#xff0c;所有比基准值大的元素摆在基…

网络安全基础技术-常见web漏洞之XSS跨站脚本攻击

首先&#xff0c;我们来探究XSS&#xff08;跨站脚本攻击&#xff09;的基本概念。简而言之&#xff0c;这种攻击方式涉及将用户的输入错误地作为前端代码执行。在Web应用领域&#xff0c;前端代码通常由HTML、CSS和JavaScript三大构件组成&#xff1a; HTML&#xff08;超文本…