数据结构与算法
文章平均质量分 66
莫叫石榴姐
云淡风轻一轮江月明
展开
-
上亿用户连续一周活跃用户数统计
需求: 上亿个用户,统计一周内连续活跃用户100000000/8/1024/1024 = 11.9M 一个bitmap占用 不到12M好在一周只有7天, 我们用7个key的bitmap来存储状态即可,加上最后的一个结果res的bitmap: 12*8=100M 内存即可!遵循下面步骤即可:用户编号是前提, 每个用户的编号从1到n(n=就是说的那个上亿的最大值); 声明7个bitmap, 从周一到周日: mon tue wed thur fri sat sun; 每个用户编号所在的of转载 2021-08-26 16:57:28 · 722 阅读 · 0 评论 -
动态规划入门青蛙跳台阶问题
0 题目一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。1 解题分析动态规划的组成部分:(1)确定状态划归为最后一步看问题。划归为子问题本题中以青蛙跳台阶的最后一步来看:青蛙跳上n级台阶有两种情况,要么青蛙跳一步,要门青蛙跳两步。1)当为1时即青蛙跳一步的时候:此时青蛙前面已经跳了n-1个台阶,有f(n-1)种跳法。2)原创 2021-04-15 18:33:51 · 2550 阅读 · 0 评论 -
利用循环不变量原理解决二分法边界问题
package jttl.jxresearch.com.hive.udf.test;public class Sloution { public static void main(String[] args) { } public int binarySearch(int[] arr,int target){ int left = 0; int right = arr.length - 1;//定义target在左闭右闭合的区间范围里。 .原创 2021-04-05 21:39:10 · 448 阅读 · 0 评论 -
数组中出现次数超过一半的数字
0 题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 21 解题方法本题实际上是求众数的思路。本题常见解法如下: 哈希表统计法: 借助外部空间存储数据(如hashset),并计数。此方法时间和空间复杂度均为 O(N) 。 数组排序法: 将数组 nums 排序,由于需要寻找的数字数量超过数组长度一半,因此排完序后的数组,...原创 2021-04-03 21:10:27 · 156 阅读 · 0 评论 -
寻找链表中倒数第K个节点
0 题目输入一个链表,输出该链表中倒数第k个结点。1 思路解析方法:滑动窗口法设滑动窗口大小为K滑动窗口的性质:剩余点个数为K-1。滑窗后的返回点个数据为N-(K-1).一般的解法:先遍历一遍该单链表,获取链表的总节点数 n,那么第 n-k+1 这个节点就是倒数第 k 个节点。所以第二次再遍历到第 n-k+1 这个节点即可。我们可以借助滑窗的思想解决此问题:窗口的大小即为K,不断移动该窗口,直到该窗口右边界为NULL时不再移动,此时窗口中左边界处即为要找的点。图示如下:解原创 2021-03-28 18:57:54 · 3021 阅读 · 2 评论 -
单向链表数据结构及相关算法题
1 单链表的解释(1)单链表的组成单链表:单向链表是一种线性表,由各个节点(Node)组成,其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它能知道下一个结点的存储位置。由N各节点(Node)组成单向链表,每一个Node记录本Node的数据(data)及下一个Node的地址(指针,引用)。向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的,其最后一个节点指针域指向为空NULL。由上面的信息我们知道一个链表由一下几个要素:原创 2021-03-28 12:15:51 · 510 阅读 · 0 评论