![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构、算法、设计模式
文章平均质量分 79
介绍数据结构、算法、设计模式等
青w韵
这个作者很懒,什么都没留下…
展开
-
动态规划由简及繁(三)
动态规划由简及繁(三)题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股原创 2020-08-16 22:14:33 · 115 阅读 · 0 评论 -
动态规划由简及繁(二)
动态规划由简及繁(二)题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。balabala…。也就是说 找数组最大和,但是如果累加i,就不能累加i-1示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号原创 2020-08-14 14:29:41 · 137 阅读 · 1 评论 -
动态规划由简及繁(一)
动态规划由简及繁(一)连续子数组最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof分析:问题拆解求原创 2020-08-13 23:22:39 · 151 阅读 · 1 评论 -
设计模式读书笔记
面向对象的编程中,不要对于所有属性都实现getter和setter,那样会暴露数据,使其容易被修改,退化为面向过程的方法。在类内部向外部必须提供一个类对象时,这样,相关的属性就会被修改。应避免外部可以修改内部对象属性。对于例如Constant类、Util类等采用面向过程来组织的类尽量做到职责单一,定义一些细化的小类。接口和抽象类抽象类(is-a)抽象类不允许被实例化抽象类可以包含...原创 2020-01-09 14:08:23 · 76 阅读 · 0 评论 -
简要学习Builder模式
Builder模式组装复杂的实例分析部分构建高楼大厦或者积木时,我们尽可能把他们分成各个小块,再组装起来。(下述为个人总结,如有错误,请斧正,谢谢)先来看看我们构造一个积木房屋时,我们如何做:观察房屋有哪几个部分(地基,房顶,窗户,花园等)。创造自己的房屋,只要包含房屋的基本部分即可,各部分(例如房顶)可以用各种材料,自己创造,也可以涂上自己喜欢的颜色。把材料按照一定方...原创 2019-10-21 21:07:12 · 103 阅读 · 0 评论 -
单例模式简单学习
问题来源当我们想在程序中表示的东西只有一种情况时,就会有“只能创建一个实例”的需求。当存在多个实例时,会有意想不到的bug,如果只有一个实例就可以放心了。方式public class Singleton { private final static Singleton ourInstance = new Singleton(); public static Singl...原创 2019-10-12 23:09:40 · 65 阅读 · 0 评论 -
为什么要写mid = low + (high - low) / 2
我们平时二分都会写 mid = (low + high) / 2,但是看很多算法题解都会写 mid = low + (high - low) / 2。为什么会这样呢?答:因为传入的low和high,为了防止数据溢出。但是这只是等价转换,按道理来讲,一:(low + high) / 2 = (2low + high - low) / 2 = low + (high - low) / 2二:(low + high) / 2 = (2high + low - high) / 2 = (2high +原创 2022-04-07 10:26:55 · 288 阅读 · 0 评论 -
线性时间排序概述
文章目录桶排序计数排序基数排序桶排序如果我们待排序的数据在一个区间内,可以使用分治的思想来排序。例如:如果给你要给一个10G的订单按照时间排序,此时的问题是你的内存只有几百MB,那么你该怎么办?可以使用分治的思想。把10G文件遍历一下,得到最小值和最大值,查看他们之间的相隔数。例如:最小:2019/11/13 01:00:25。最大:2019/11/20 10:12:14我们可以按照天来分割为7个桶,或者按照4小时分割42个桶。假设我们选择第二种,遍历文件,从2019/11/13开始。原创 2020-11-14 16:56:25 · 298 阅读 · 0 评论 -
稳定排序详解,Java多条件排序,稳定排序相关题目
稳定排序概念加例子理解稳定排序:不改变相同值的前后次序指的是如果有这样两个数据:[ { "name": "jack", "high": 175 }, { "name": "tom", "high": 175 }]那么他们排完序之后应该还是原来的顺序,而不会变成:[ { "name": "tom", "high": 175 }, { "name"原创 2020-11-11 21:30:38 · 269 阅读 · 0 评论 -
常用排序/面试常考排序
冒泡排序插入排序快速排序归并排序堆排序原创 2020-10-04 12:22:49 · 191 阅读 · 0 评论 -
快速排序的三种写法
快速排序引言 孔甲己一到店,跟柜里说,“来一杯茶,要一碟茴香豆。”便排出九文大钱。看没人理自己,便对记账的小童问道,这茴香豆的茴字有四种写法,你知道么? 近期闲来看了看快速排序,核心思想也就在于,找到一个可以作为中间分隔的数字,再将大的放到左边,小的放到右边,重复数次。 在网上查找相关资料,找到了快速排序的3种写法所使用到的接口和抽象类注:只是为了练习泛型,并且让测试更加方便。...原创 2020-04-01 18:48:44 · 321 阅读 · 0 评论 -
数组
数组一种线性表数据结构,用一组连续的内存空间,存储一组具有相同类型的数据。线性:数据排成相一条线一样的结构,每个线性表上的数据最多只有前后两个方向。连续的内存空间和相同类型的数据。由于连续的内存空间,数组支持随机访问;但插入和删除为了保证连续,就需要进行大量数据搬移。随机访问公式:a[i] = base_address + i * data_type_size。插入:在末...原创 2019-11-06 16:42:25 · 174 阅读 · 0 评论