自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 日常算法练习(4)股票系列问题(DP解法)

前言 股票系列算法问题时常伴随着各种“奇技淫巧”,在本文中我尽量以DP的方式来解答这类问题,同时抽象出一个大致的模版供大家参考。 买卖股票的最佳时机I https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 首先我们审题,关键点有以下几点: 1.只允许一笔交易 2.不能在买入前卖出 我们面临的情况只有两种: 1.不持有股票的时候决定买入或不买入 2.持有股票的时候决定卖出或不卖出 我们求的是一次交易的最大收益,就可以转换为在最便宜的

2020-07-13 23:33:32 219

原创 设计模式(2)SOLID原则

设计原则(SOLID原则) 在进行设计模式的讲解前,我们需要先有一个概念——就是设计模式是服务于什么的,各种设计模式的目标是什么,这就要牵扯到如何评价代码的好坏的标准了。评价代码好坏的维度有很多,在这里我们只说几个比较常用的同时也是后面的设计模式中相关的:可维护性、可读性、可扩展性是在评价标准中提到最多的、最重要的三个评价标准。 Single Responsibility Principle(单一职责原则) 定义:我们直接来看英文的定义吧,A class or a module should have a

2020-07-12 19:56:37 144

原创 日常算法练习(3)二叉树遍历问题(迭代解法)

前言 在开始具体介绍二叉树遍历问题的迭代解法前,我想和大家分享一下自己对于此类题目(或者说算法题目)的看法,在编写代码的过程中,我们首先要考虑的事情就是该代码块的**输入**和**输出**,我们只有搞清楚了输入和输出才能去考虑用什么样的操作来将输入转化为相应的输出,其实这个思想也应该细化到我们解算法题的内在过程中,比如当我们无法想到当前操作如何编写的时候,我们要去搞清楚当前操作的输入是什么,输出又是什么,这样思路会清晰很多。 二叉树的前序遍历 我们直接以题目为例(https://leetcode-cn.co

2020-07-07 14:09:53 164

原创 设计模式(1)面向对象

封装特性 目的:隐藏信息,保护数据隐私性,仅暴露接口,提高易用性 实现方式:需要编程语言提供访问权限控制语法来实现,例如java中的protected,private,public 抽象特性 目的:隐藏功能的具体代码实现,让使用者仅关心该方法“做什么”,而不去关心“怎么做的”,同时可以提高代码的可维护性和可扩展性,也是处理复杂系统的手段,可以过滤掉不必要去关注的信息。 实现方式:可以通过接口类/抽象类实现,但是实际上并没有严格的定义,方法本身就是一种抽象,我们在使用一个方法时候只需要关注输入输出即

2020-07-07 13:26:07 69

原创 日常算法练习(2)二叉树的前中后序遍历+二叉树的层次遍历(递归解法)

二叉树的遍历 二叉树各种遍历的递归模版 树这种数据结构是非常适合使用递归算法的,因为本身的自身相似性非常强。 我们先以二叉树的前序遍历为例(https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/),前序遍历的顺序为“根左右” 首先定义二叉树的结构: public class TreeNode { int val; TreeNode left; TreeNode right;

2020-07-03 17:08:35 192

原创 日常算法练习(1)N皇后问题常规题解

N皇后问题 原题链接:https://leetcode-cn.com/problems/n-queens/ 拆解题目 1. 在一个n x n的棋盘上,每行放一个“皇后” 2. 不能互相攻击(不在同一直线/对角线上存在) 3. 返回所有解决方案 4. 输出答案为“皇后”位置为"Q"空位置为"." 自顶向下的解题思路 n x n的棋盘 int [][] result = new int[n][n]; 验证位置是否符合“不能互相攻击”原则 public boolean valid(int row , int

2020-06-29 22:07:51 374

原创 数据结构与算法——自底向上(1)随机访问与排序算法

两种基本的数据存储方式: 1. 连续存储 2. 非连续存储 数据的各种存储方式的意义在于支持增删查改 连续存储的特点: 连续的存储方式让存储地址之间存在关联,这种关联支持了——随机访问(random access)这样的操作。 缺点是每次存储数据都需要占据一整段连续的存储空间,会造成内存空间的浪费。 非连续存储的特点: 不需要提前占据整段的存储空间,可以充分利用内存。 需要使用指针来将相关的存储数据进行串联。 两种基本的数据存储方式的特点就引出了数据结构与算法最根本的两个概念——时间与空间 所

2020-06-29 16:07:17 610

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除