算法与数据结构
maihc1
这个作者很懒,什么都没留下…
展开
-
Algorithm——Trie树
字典树(Trie树)的应用字典树的定义字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。字典树的用处说完了字典树的定义之后,我们来了解一下大名鼎鼎的字典树能用来解决什么问题,请大家先想一下如果我们想要实现这样一个功能:插入大量字符串,然后查找某些字符串是否在刚才插入的字符串序列中。我想大部分同学首先想到的就是用一个哈希表来存储之前插入的字符串,然后再在之前的哈希表里面查找是否原创 2021-11-14 20:06:01 · 234 阅读 · 0 评论 -
Algorithm——高楼扔鸡蛋
问题描述高楼扔鸡蛋问题是一道经典的动态规划问题,题目如下:给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。请原创 2021-10-31 12:56:30 · 301 阅读 · 0 评论 -
LeetCode每日一题-2021/07/02-雪糕的最大数量
雪糕的最大数量–java–排序+贪心思路:这道题很明显可以看出来,是一道贪心求解的问题,但前提是先对其进行排序。代码:class Solution { // 贪心法 public int maxIceCream(int[] costs, int coins) { int res = 0; Arrays.sort(costs); for( int i = 0; i < costs.length; ++i ){ .原创 2021-07-02 07:50:38 · 79 阅读 · 0 评论 -
LeetCode每日一题-2021/06/11-完全平方数
完全平方数–java–BFS思路:这道题官方题解给的是dp和数学解法,这两天基本被DP搞得心态崩了。这道题我想到的是BFS暴力,也是没谁了。过几天必须专门把DP弄明白了。暴力解法,BFS模板直接用就好,没什么特别难理解的地方。代码:class Solution { public int numSquares(int n) { List<Integer> list = new LinkedList<>(); for( int i =.原创 2021-06-11 22:02:16 · 113 阅读 · 2 评论 -
LeetCode每日一题-2021/06/05-移除链表元素
移除链表元素思路:这道题很容易想到的一个思路是开辟一片新的空间,然后遍历原数组,将符合条件的加入新链表,这样做空间复杂度为O(n)。第二种方法是在原地修改链表,空间复杂度为O(1)。需要注意的是保证注意最后一个节点值为val的情况。具体操作流程见下图:代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListN原创 2021-06-05 23:26:46 · 83 阅读 · 1 评论 -
LeetCode每日一题-2021/06/04-相交链表
相交链表–java–哈希表思路:这道题,很容易想到的就是双循环暴力来做,也是一道很少有的LeetCode暴力不超时的题第二种思路是使用哈希表来做,先将A遍历,放入哈希表中,然后再遍历B,如果B中的元素在哈希表中存在,则返回该元素,否则返回null代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(.原创 2021-06-04 16:52:17 · 60 阅读 · 0 评论 -
Leetcode每日一题-2021/05/20-前K个高频单词
Leetcode每日一题-2021/05/20-前K个高频单词前K个高频单词方法一:哈希表+排序思路:首先将字符串的出现次数存储在哈希表中(字符串作key,次数作value),然后根据出现次数将其进行排序(从大到小),如果出现次数一样,则按字典序排序。最后返回排序后的前K个字符。代码如下:class Solution { // 哈希表+排序 public List<String> topKFrequent(String[] words, int k) {原创 2021-05-20 21:21:20 · 49 阅读 · 0 评论 -
LeetCode每日一题-2021/05/19-找出第k大的异或坐标值
找出第k大的异或坐标值–java–动态规划本题是一道考察***异或性质***以及***简单的动态规划思想***的题目本题思路:读题之后,相信很多同学都可以很容易的想到本题的状态转移方程:即dp[i][j] = dp[i - 1][j - 1] ^ dp[i][j - 1] ^ dp[i - 1][j] ^ matrix[i][j];根据状态转移方程可以很容易的求得二维dp数组。由于题目是让求第K大的异或值,只需对所有的异或值进行排序,然后返回第K大的异或值即可。代码实现:class Solut原创 2021-05-19 13:58:09 · 68 阅读 · 0 评论 -
leetCode每日一题-2021/05/18-形成两个异或相等数组的三元组数目
形成两个异或相等数组的三元组数目我是垃圾,第一时间连前缀和都没想到~~~。说说这道题吧,首先想到的思路是三次循环,然后在第三重循环中再套一重循环求a和b的值,判断是ab否相等。时间复杂度为n^4,结果没有任何悬念的超时了。附上代码:class Solution {// 暴力解法public int countTriplets(int[] arr) {int cnt = 0;for( int i = 0; i < arr.length; ++i ){for( int j = i +原创 2021-05-18 17:30:00 · 61 阅读 · 0 评论 -
LeetCode每日一题-2021/05/17-二叉树的堂兄弟节点
二叉树的堂兄弟节点-java(DFS)题目如下:求两个节点是否为堂兄弟节点,只需要两个节点的深度(即depth)相等并且父节点不是同一个即可(为了方便,只需要父节点的值不相等)也就是说满足堂兄弟节点的条件就是:两个节点的深度相等父节点的值不相等主要思路:前序遍历整棵树,维护每个节点的深度和父节点,将x、y的深度和父节点的值保存起来。树的遍历完成后,判断值为x、y的节点是否为堂兄弟节点即可。代码如下:/** * Definition for a binary tree node. *原创 2021-05-17 22:57:42 · 69 阅读 · 0 评论