数据结构与算法
浅唱战无双
小硕一枚,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 · 1528 阅读 · 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 · 129 阅读 · 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 · 90 阅读 · 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 · 270 阅读 · 0 评论 -
最小的字典序
最小字典序题目给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字 符串拼起来之后形成的字符串具有最低的字典序。如"ab",“cd”,“ef”,则拼接后的最低字典序是:“abcdef”这里重点是选择什么样的贪心策略:最直观的:依次比较两个字符串的ASCII码,但是这种策略有漏洞,不正确:如"b",“ba”,按照我们的策略,结果应该是"bba";而实际最低的字典序应该是"bab...原创 2019-12-05 21:21:22 · 4382 阅读 · 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 · 163 阅读 · 0 评论 -
小岛问题以及优化思想
岛问题一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?举例:0 0 1 0 1 01 1 1 0 1 01 0 0 1 0 00 0 0 0 0 0这个矩阵中有三个岛。public static int countIslands(int[][] m) {if (m == null ||...原创 2019-12-05 15:41:04 · 624 阅读 · 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 · 266 阅读 · 0 评论 -
回溯算法简单介绍
转载自labuladong微信公众号,侵权删。废话不多说,直接上回溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。如果你不理解这三个词语的解释,没关系,我们后面会用「全排列」和「N 皇后问题」这两个经典的回溯算法问题来帮你...原创 2019-12-03 16:49:22 · 756 阅读 · 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 · 534 阅读 · 0 评论