
数据结构与算法
浅唱战无双
小硕一枚,AI初级,社会推荐,
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字节实习面试题
题目:给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, 问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,返回3. public class FindIndex { public static int findindex(cha...原创 2020-02-26 11:07:16 · 1613 阅读 · 0 评论 -
有关回溯法的几道题
著名的n皇后问题: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 public class NQueue { public static int N=8; public static int[] QueueColumm=new int[N];//QueueColumn[i]的值表示第i个皇后放在哪一列;每行代表一个皇后 ...原创 2019-12-31 15:28:40 · 183 阅读 · 0 评论 -
KMP算法
大名鼎鼎的KMP算法,当初考研时也没好好看,最近才搞懂,惭愧。 public class KMP { public static int[] GetNextArray(char[] str2){//str2为子串 if(str2.length==1) return new int[]{-1}; int[] next=new int[s...原创 2019-12-10 20:36:47 · 134 阅读 · 0 评论 -
贪心问题之初探--经典贪心问题
题目一 一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共...原创 2019-12-06 13:50:56 · 339 阅读 · 0 评论 -
最小的字典序
最小字典序 题目 给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字 符串拼起来之后形成的字符串具有最低的字典序。如"ab",“cd”,“ef”,则拼接后的最低字典序是:“abcdef” 这里重点是选择什么样的贪心策略: 最直观的:依次比较两个字符串的ASCII码,但是这种策略有漏洞,不正确:如"b",“ba”,按照我们的策略,结果应该是"bba";而实际最低的字典序应该是"bab...原创 2019-12-05 21:21:22 · 4558 阅读 · 1 评论 -
前缀树初探:前缀树的经典结构
前缀树的构造 如下图,将“abc”,“bcd”,"bd"依次添加,构成下面的前缀树,每个节点里的字段可以对照着下面的程序来理解: public class TrieTree { public static class TreeNode{ public int path; public int end; public HashMap<C...原创 2019-12-05 20:15:29 · 227 阅读 · 0 评论 -
小岛问题以及优化思想
岛问题 一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛? 举例: 0 0 1 0 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 这个矩阵中有三个岛。 public static int countIslands(int[][] m) { if (m == null ||...原创 2019-12-05 15:41:04 · 706 阅读 · 0 评论 -
并查集初探(UnionFindSet)
并查集 并查集主要有两个功能: 快速检测两个元素是否属于一个集合 isSameSet(A,B) 将两元素所在的集合合并在一起 Union(A,B) package com.mianshi.neu; import java.util.HashMap; import java.util.List; import java.util.Stack; public class UnionFindS...原创 2019-12-05 15:17:04 · 342 阅读 · 0 评论 -
回溯算法简单介绍
转载自labuladong微信公众号,侵权删。 废话不多说,直接上回溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的选择。 3、结束条件:也就是到达决策树底层,无法再做选择的条件。 如果你不理解这三个词语的解释,没关系,我们后面会用「全排列」和「N 皇后问题」这两个经典的回溯算法问题来帮你...原创 2019-12-03 16:49:22 · 863 阅读 · 0 评论 -
k-d tree算法原理及实现
优化knn可以用到kd树,网上找到一篇博文写的不错,特意转载过来,来源: k-d tree即k-dimensional tree,常用来作空间划分及近邻搜索,是二叉空间划分树的一个特例。通常,对于维度为kkk,数据点数为N的数据集,k-d tree适用于N≫2kN≫2^kN≫2k的情形。 1)k-d tree算法原理 k-d tree是每个节点均为k维数值点的二叉树,其上的每个节点代表一个超平面,...转载 2019-07-14 11:19:22 · 592 阅读 · 0 评论