![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
刷题/Leetcode/DS
文章平均质量分 60
刷题/leetcode/DS
CodingALife
这个作者很懒,什么都没留下…
展开
-
刷题(六):1374. 生成每种字符都是奇数个的字符串
1374. 生成每种字符都是奇数个的字符串给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。示例 1:输入:n = 4输出:"pppz"解释:"pppz" 是一个满足题目要求的字符串,因为 'p' 出现 3 次,且 'z' 出现 1 次。当然,还有很多其他字符串也满足题目要求,比如:"ohhh" 和 "love"。class Solution原创 2021-01-10 13:19:24 · 142 阅读 · 0 评论 -
刷题(五):1332. 删除回文子序列
1、删除回文子序列给你一个字符串s,它仅由字母'a' 和 'b'组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。class Solution { public int removePalindromeSub(...原创 2021-01-12 10:50:15 · 164 阅读 · 0 评论 -
刷题(四):819. 最常见的单词
1、最常见的单词给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。class Solution { public String mostCommonWord(String paragraph, String[] banned) { paragraph += "原创 2021-01-09 16:12:53 · 184 阅读 · 0 评论 -
刷题(三):35. 搜索插入位置
35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。解题思路标签:二分查找 如果该题目暴力解决的话需要O(n)O(n)的时间复杂度,但是如果二分的话则可以降低到O(logn)O(logn)的时间复杂度 public int searchInsert(int[] nums, int target) { int left = 0, right = ...原创 2021-01-09 01:09:18 · 94 阅读 · 0 评论 -
数据结构(1):DAG的遍历
原文:https://zhuanlan.zhihu.com/p/113742659https://blog.csdn.net/zhoucheng05_13/article/details/79403505https://blog.csdn.net/feilong_csdn/article/details/69321375?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EsearchFromBaidu%7Edefau...转载 2021-07-28 11:10:05 · 1039 阅读 · 0 评论 -
什么是算法分析
第一:数据越多意味着程序运行要花的时间越长。第二:算法分析常见的函数中,线性算法效率最高。第三:当N足够大时,函数的增长率是最重要的。第四:平方算法对输入规模超过几千是不可行的。第五:立方算法对输入规模是几百不可行的。第六:按增长率升序排列的函数(常数、对数、对数的平方、线性、NlogN、平方、立方、指数)。...原创 2018-03-10 14:45:47 · 2858 阅读 · 0 评论 -
矩阵的最小路径和 动态规划(一)
暴力递归改动态规划例:给你一个二维数组,二维数组中的每个数都是正数,要求从左上角走到右下角,每一步只能向右或者向下。沿途经过的数字要累加起来。返回最小的路径和。测试数组:int[][] m = { { 3, 1, 0, 2 }, { 4, 3, 2, 1 }, { 5, 2, 1, 0 } };1.写出尝试(递归)版本 /** * 暴力递归---重复计算...转载 2019-03-28 12:37:15 · 3836 阅读 · 0 评论 -
一致性Hash(Consistent Hashing)原理剖析及Java实现
目录一、一致性Hash(Consistent Hashing)原理剖析二、一致性hash算法的Java实现一、一致性Hash(Consistent Hashing)原理剖析引入一致性哈希算法是分布式系统中常用的算法。一致性哈希算法解决了普通余数Hash算法伸缩性差的问题,可以保证在上线、下线服务器的情况下尽量有多的请求命中原来路由到的服务器。在业务开发中,我们常把数据持久化...转载 2019-03-23 14:22:52 · 3559 阅读 · 0 评论 -
数据结构基础----二分搜索树
原文:https://loubobooo.com/2018/11/04/%E5%88%9D%E5%AD%A6%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E4%BA%8C%E5%88%86%E6%90%9C%E7%B4%A2%E6%A0%91/前言之前我们一直专注在线性数据结构上,在这一章要开始学习计算机领域应用及其广泛的–树结构。树的概括下图的数据存...转载 2019-01-10 23:43:28 · 342 阅读 · 0 评论 -
数据结构基础----链栈
1、基于单链表的栈头结点的插入和删除操作,时间复杂度均是O(1),而末节点的插入操作是O(1),删除操作是O(n)。相比而言,头结点插入和删除效率较高以链表为底层的数据结构时,以链表头为作为栈顶较为合适,这样方便节点的插入与删除。压栈产生的新节点将一直出现在链表的头部;2、顺序栈、链栈比较进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储。...转载 2018-09-16 09:51:24 · 1000 阅读 · 0 评论 -
数据结构基础之动态数组
动态数组数组的局限性目前为止所实现的数组类,有一个非常严重的局限性,就是这个数组实际使用的还是一个静态数组,内部容量有限。在实际使用的时候,我们往往无法预估要在这个数组中存入多少个元素。解决方案在这种情况下,如果容量首次开太大,可能会浪费很多空间,但容量太小,又有可能不够用。这时候,需要有一种解决方案使得这个数组的容量是可伸缩的,也就是所谓的动态数组。思路首先,原数组dat...转载 2018-09-03 18:45:11 · 1859 阅读 · 0 评论 -
二分搜索问题详解(java)
package com.lihe.test.collection;/** * 理论回顾: * (1)二进制数中位:表示N个连续整数需要多少位? * 一个16位的short整形表示65536个范围-32768到32767的整数。B个位表示2^B个不同整数。 * 故表示N个连续整数需要位数B满足2^B>=N,故B>=logN,最小位数是[logN](上取整) * (2)重复翻倍:从X=1开...原创 2018-03-11 16:19:56 · 904 阅读 · 0 评论 -
01背包问题(java,动态规划)
一、问题描述:(01背包即每个物品最多放一个)01 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?二、理论解释:声明一个 大小为 m[n][c] 的二维数组,m[ i ][ j ] 表示 在面对第 i 件物品,且背包容量为 j 时所能获得的最大价值 ,那么我们可以很容易分析得出 ...转载 2018-03-25 21:49:51 · 1990 阅读 · 0 评论 -
并查集详解
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也...转载 2018-08-07 10:38:44 · 166 阅读 · 0 评论 -
杭电1232_畅通工程(并查集)——java
Problem Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道...原创 2018-08-07 14:50:06 · 205 阅读 · 0 评论 -
数据结构(一):时间复杂度
一、算法时间复杂度的本质是算法的执行时间,也就是算法中所有语句的频度之和。语句频度就是语句的执行次数,它与算法求解问题的规模大小相关。二、假设对于给定的算法,目前问题规模为n,则语句频度可以表示成一个关于问题规模的函数T(n),那么算法时间复杂度也就可以用T(n)表示,其含义是算法在输入规模为n时的运行时间。三、当问题规模很大时,精确的计算T(n)是很难实现而且也是没有必要的。对于算法...原创 2018-09-04 10:57:03 · 5918 阅读 · 0 评论 -
数据结构基础----栈
栈栈的概括首先,相对栈这种数据结构而言,我们可以理解成,它本质就是一个数组,我们把数据排开来放,但是我们规定添加元素的时候,我们只能从栈的一端去添加元素,而取出元素的时候,也只能从同一端来取出元素 (取出一端通常我们称为栈顶)。在形成了栈这种数据结构之后,在我们的计算机世界中,对于组建逻辑有着非常重要的作用。在这里我进行了一个简单的图示,我可以理解成,如图示:这样一个栈,栈顶就...转载 2018-09-04 14:04:30 · 1140 阅读 · 0 评论 -
数据结构基础----队列
队列我在这一章的前半部分向大家介绍了栈这种数据结构,那么我在这章的后部分,向大家介绍队列这种数据结构。队列的概括队列,本身也是一种线性数据结构,换句话说数据依旧是排成一排,这一点和栈一样。不过和栈不同的是,队列只能从一端添加元素,而从另一端取出元素v,通常。我们添加元素的一端称为队尾,而取出元素的一端称为队首**。事实上这一切都非常好理解,队列这个名字的由来也和我们生活中,排队那个队列...转载 2018-09-04 16:24:28 · 339 阅读 · 0 评论 -
数据结构基础----链表(Linked List)
原文:https://loubobooo.com/2018/09/16/%E5%88%9D%E5%AD%A6%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E9%93%BE%E8%A1%A8/1、链表的概括虽然动态数组靠resize方法解决静态数组固定容量的问题,但依旧摆脱不了仍是静态数组的事实,而链表则与上述线性数据结构都不同,是一种真正的动态数据结构。...转载 2018-09-05 11:16:00 · 1157 阅读 · 0 评论 -
连续子序列最大和问题精讲(java实现)
package com.lihe.test.collection;import java.util.Scanner;public class MaxSequenceSum { /** * @author limingyu * 连续子序列最大和问题:给定(可能是负的)整数序列A1,A2,...An,寻找使的值最大的序列。 * 如果所有的整数都是负的,那么连续子序列的最大和是零。要求算法复杂度...原创 2018-03-10 14:32:37 · 1085 阅读 · 0 评论