自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木心算法

记录学习中的点滴,包括算法,技术,读书以及人生感悟

  • 博客(24)
  • 收藏
  • 关注

原创 滑动窗口详解

滑动窗口基本概念滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。应用:利用滑动窗口获取平滑的数据,如一段连续时间的数据平均值,能够有更好的稳定性,如温度监测。什么情况可以用滑动窗口来解决实际问题呢?一般给出的数据结构是数组或者字符串求取某个子串或者子序列最长最短等最值问题或者求某个目标值时该问题本身可以通过暴力求解核心思路窗口的形成在具体使用之前,我们知道窗口实际是两个指针之间形成的区域,

2021-10-18 20:06:24 39223 4

原创 一文详解leetcode多线程同步问题

多线程问题在日常的开发工作中很是常见,同时也是很重要的。多线程本身比较复杂,调试困难,在提高效率的同时,对线程安全也有更高的要求,因此多线程之间的同步是多线程问题的一个很重要的知识点。在面试过程中,也是判断候选人能力的一个很重要的考察点。本文针对leetcode上的一些多线程同步问题进行分析和总结,并尝试对同一问题使用常见的多线程同步的不同解决方法,以期能够熟练掌握多线程同步(通信)相关内容。基础知识为保证线程安全,多个线程同一时刻只能有一个线程进入临界区,其他线程则等待,直到该线程退出临界区,所有.

2021-10-10 23:39:05 313

原创 从一道概率问题说起

从一道概率问题说起本文选取面试过程中有意思的概率问题来进行讨论和分享,具体如下:​ 给定一个函数rand7(),每次调用都能够等概率的生成1-7这7个数字,利用这个函数如何等概率地生成1~9呢,即实现函数rand9()。分析我们能够利用的有限条件是rand7()这个函数,它能够等概率地生成1-7,而我们需要等概率地生成1~9,这中间必然是有联系,且能够进行转换的。换一个角度,如果我们有rand9(),那么如何实现rand7()呢?实际上,如果我们有rand9()这个函数的话,每次生成的数据

2021-09-07 16:38:30 378

原创 LeetCode 表达式求值/基本计算器 通用解法

LeetCode刷题最好按照标签归类来刷,本文主要对leetcode上的表达式求值(基本计算器)问题做一个梳理。这个问题实际上是一个很基础也很常见的问题,在《算法4》中也有提及使用双栈来解决,本文基于双栈求解该问题做了一个详解。实际在上一篇LeetCode 括号问题专栏中也提及了栈结构可用于处理表达式求值问题,在LeetCode中该类问题也有很多,理解本文后,可以使用该解法解决LC上所有该类问题。LC224. 基本计算器LC227. 基本计算器 IILC772. 基本计算器 III基本计算器

2021-07-11 18:04:53 661

原创 LeetCode 括号问题专栏

LeetCode刷题最好按照标签归类来刷,本文主要对leetcode上的主要括号问题做一个梳理。括号问题实际上在字符串中常出现,还有一些表达式求值的问题上也有应用,因此本次做一个总结。LC20 有效括号LC22 括号生成LC23 最长有效括号LC678. 有效的括号字符串LC1190. 反转每对括号间的子串LC1249 移除无效的括号括号问题的核心括号都是左右括号成对出现的,因此有效的括号必须满足一下条件:在整个字符串中 左右括号的数目必须相同在遍历字符串的过程中,左括号的数目总

2021-07-10 00:05:53 554 5

原创 动态规划 背包

目标和LeetCode 494对每一个数字都可以进行 + 操作 或者 - 操作,实际上最后就是一个树的搜索问题。使用深度优先进行遍历,需要记录当前访问的是第几个元素,当前的结果。递归结束的条件:1)当前位置超过数组的边界2)当前和等于目标和,记录结果 class Solution { List<String> res = new ArrayList<>(); public int findTargetSumWays(int[] n

2021-07-07 00:00:45 95 3

原创 树的非递归遍历(统一形式)

树的遍历本文针对树的前中后序的非递归遍历,统一模板。前序遍历public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); if(root == null){ return res; } Stack<TreeNode> stack = new

2021-05-26 00:03:24 171

原创 递归构造数组

构造数组题目:给定一个整数N,构造一个长度为N的数组a,对于任意的i<k<j,满足a[i]+a[j]!=2*a[k]分析可以类比数学归纳法,假定一组数据成立,判断另外一组是否也成立。1、当只有一个数字时,肯定满足题意,比如 a={1}2、当数组中存在a[i]+a[j]!=2a[k]那么存在一种变换:如对每个数都进行+1操作,使得操作后的数,也满足式子成立:(a[i]+1)+(a[j]+1) !=2(a[k]+1),这样就根据原有的数据扩充了一组数据。同样的我们是否可以做一个

2021-04-24 11:38:34 426

原创 算法目录

算法分类总结算法常刷常新,不刷就忘,这个专栏目录记录日常学习的算法,包括Leetcode,还有工作中遇到的算法问题,对问题进行归类病做一些总结,记录下一些通用的规律和自己的心得。这里先建一个目录,做一个备忘链表树数组动态规划回溯问题系统设计概率类...

2021-03-24 23:09:10 110

原创 常用命令

一、Java命令1.1 jarjar可用于生成和解压jar包,常用参数有c(创建jar)x(解压)u(在已有jar包中添加文件)t(展示jar包内容)f(指定jar包的文件名)v(输出详细报告)等其中 c x u t f 这几个中必须选择一个格式:jar 命令 jar包名称(可带路径) 源文件(需要打包,或解压后的名字)jar cvf a.jar /temp/a.cl...

2020-02-20 15:27:14 98

原创 动态规划 回文篇

回文字符串指的是字符串从左到右 和从右到左是一样的。对于从i到j的子串,判断其回文s[i]==s[j] &amp;amp;&amp;amp;(flag[i+1][j-1] || j-i&amp;lt;=1)1、最小回文分割次数求最小的切分,使得分割后每个子串都是回文的。状态 dp[i] 表示从i到n-1的最小回文分割数目,那么对于任意的一个j,j属于[i,n-1],如果[i,j]是回文的话,则dp[i]=m...

2018-12-28 20:43:05 1557

原创 堆排序及其应用

介绍堆排序及其应用,topk问题,优先级队列等。

2018-12-20 23:14:45 814

原创 快速排序及其应用

快速排序被称为是20世纪10大算法之一,可见其重要性,不明觉厉。学习快速排序不单单只是一种排序算法,更重要的是其中包含的思想,分治思想。下面进入正题,本文将给出多种快速排序的方法,并给予评价。快速排序的思想是分治,分而治之,和归并排序一样,我们将大问题分解同小规模的具有相同解法的小问题。快速排序的重点在分,归并侧重“并”,所谓分,指的是找到一个位置,这个位置的数将序列划分成两部分,左边比它...

2018-12-20 23:03:11 1895

原创 归并排序及其应用

归并排序及其应用归并排序采用分治和递归的思想完成排序,简单来说就是,将一个规模较大的排序问题转换成两个较小规模的问题,最终形成两个已经排好的序的子数组,进而进行归并即可。左路归并右路归并合并左右两路已排好序的数组具体代码如下:public class MergeSort { /** * 归并排序 分治,整体排序=左右两边有序+合并后再排序 * @para...

2018-10-14 16:01:02 908

原创 二分搜索

二分搜索看起来简单,但在实际运用中却变化万千,容易出错。博主之前也是看到一遍就去学习查找,然而并没有进行总结,在边界条件,返回值等总是模糊,后来想着还是彻底把它搞清楚,这样一劳永逸,同时也能够灵活运用。这是这个专题的初衷。...

2018-09-12 00:02:45 1603

原创 子数组累加和问题

给定一个整数数组(无序且有正有负)和一个目标值,求这个数组中子数组的和为目标值的子数组的最大长度。 求解思路:子数组是连续的,s[i]表示从0~i位置的累加和,s[j]表示0~j位置的累加和,那么从j+1~i位置的累加和为s[j]-s[i],他可以表示任意子数组的累加和,如果这个累加和就是目标值aim,那么找出长度最长的即可。 遍历一遍数组,并求出各个位置的累加和,如在i位置时求得为s[i]

2018-01-06 22:28:01 965

原创 Git分支管理命令

Git自动会创建一个master分支,主分支一般都是发布版本,但一般都会有更新版本,因此会有其他分支,在其他分支上进行开发,最后再合并到主分支上,这样在更新版本时就会很方便。 Git与分支有关的命令: 1、创建分支 git branch dev 2、切换分支 git checkout dev 将当前分支设置为dev分支 创建并切换:git checkout -b dev 3、查看

2017-12-05 11:21:50 170

原创 DFS求解DecodeWays输出所有情况和方法数

这是一道leetcode上的原题,在笔试面试中也经常遇到。一般我们只要求出所有的解码种类数目就可,并没有要求输出所有的解码序列,这里运用DFS解决了这个问题。题目描述如下: 现在我们先求解一下编码方法数。通过题目我们可以知道,编码是通过一个或两个字符来实现,对于一个编码“12125”;可以一个一个字符的进行编码,也可以两个来进行,这就类似于我们的爬楼梯问题,一次可以上一个台阶,一次也可以上两个

2017-10-28 15:29:47 399

原创 DFS求解出栈顺序,输出所有情况

给定一个入栈顺序,输出所有出栈顺序及其方法数。对于一个一入栈的的数,他有两种选择,出栈进而输出,或者不出栈,等待新的元素进栈,不论哪一种操作,操作完成之后都会形成一个新的序列,这跟进行出栈,入栈操作之前一样,因此可以用递归的方法来模拟实现。输入的参数有3个,输入队列,中间用来存储的栈,用于输出的队列。我们在进行某一种操作后,这三种数据结构中的数会发生变化,但我们可以把它看做是初始的一种状态,从而进行

2017-10-27 21:53:02 3148

原创 DFS求解迷宫问题

DFS求解迷宫问题给定一个迷宫地图,实际就是一个二维的数组,其中0代表可通过,1代表有障碍不能通过,求出所有路径。这种搜索问题一般使用深度搜索DFS,从出口处开始,根据选择的不同方向(上下左右)来到达另一个位置,这时可以把新到达的位置看做是新的起点,这样就可以递归的求解同样的子问题,递归结束的条件是最后到达了终点。在搜索的过程中,我们可以进行剪枝操作,我们先沿着某个方向走,并沿途把走过的节点进行标记

2017-09-25 21:41:17 4294

原创 Logistic回归

本文实现了Logistic回归算法。数据集为机器学习实战中的该章节的数据。Logistic回归应用概率的方法来实现对参数的求解,利用最大似然及梯度上升的方法来实现参数的迭代。 下面为具体代码,用到了批量梯度上升,每次更新权值都需要加载所有的数据集,因此适用于较小的数据集。import numpy as npimport matplotlibimport matplotlib.pyplot as

2017-04-19 21:41:01 481 1

原创 C#多线程锁

c#多线程操作队列

2017-04-18 19:33:43 5783

原创 Python实现KNN算法手写识别数字

本文实现用KNN算法实现手写识别数字功能。 语言:Python 训练材料:手写数字素材32*32像素from numpy import *import osfrom os import listdirimport operator#将文件32*32转成1*1024def img2vector(filename): vect=zeros((1,1024)) f=open(

2017-04-01 16:53:01 2716 1

原创 python爬虫学习(股票数据爬取)

最近在学习python爬虫方面的知识,下面是做的一个简单爬虫示例。 从沪深A股中爬取股票列表中的数据到本地 用到的库:requests库,BeautifulSoup 爬取的链接为:http://quote.stockstar.com/stock/ranklist_a_3_1_1.html 代码如下:import reimport requestsfrom bs4 import Beaut

2017-03-19 21:55:15 2453

空空如也

空空如也

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

TA关注的人

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