数据结构与算法
数据结构与算法
Ftworld21
专注游戏开发。
展开
-
算法思想汇总
95% 的算法都是基于这 6 种算法思想 - 知乎 一文图解弄懂八大常用算法思想! - 掘金 八种常用算法思想 | 智能后端和架构 【总结】递归、回溯、深度优先、广度优先_递归算法与深度优先算法-CSDN博客 https://www.cnblogs.com/cdaniu/p/16369446.html原创 2024-05-20 20:28:52 · 581 阅读 · 0 评论 -
拓扑排序(Topological Sorting)
DAG有向邻接图才有拓扑排序,非DAG没有。拓扑排序可以使用邻接表,邻接矩阵来存储。原创 2024-04-15 10:50:53 · 159 阅读 · 0 评论 -
LRU的实现
go语言实现LRU算法_go lru算法_ALIN琳的博客-CSDN博客面试中 LRU / LFU 的青铜与王者原创 2023-03-23 11:00:27 · 67 阅读 · 0 评论 -
hash与一致性hash
一文读懂哈希和一致性哈希算法 - SpringLeee - 博客园原创 2021-11-24 11:45:10 · 173 阅读 · 0 评论 -
算法思想
1.递归算法一.汉诺塔https://www.cnblogs.com/lightmonster/p/10274552.htmlhttps://www.cnblogs.com/wuzhenbo/p/3496054.htmlhttp://c.biancheng.net/view/1556.html原创 2020-10-31 23:59:34 · 81 阅读 · 0 评论 -
基础
一.大O时空复杂读分析法一种分析时间复杂读和空间复杂度方法。常见的时空复杂度量级有O(1),O(logn),O(n),O(n*logn),O(n^2),O(2^n),O(n!)。复杂度分析又可以分为最好,最坏,平均和均摊时空复杂度。二.Chunk it up三.Deliberate practicing四.Feedback多写多练,在明确题目含义的情况下,想出一个题目所有的解,从中找到一个最好的解。...原创 2020-10-25 21:19:56 · 94 阅读 · 0 评论 -
北大OJ
以前一直在九度OJ上做题,最近这个OJ登陆不上去,转到北大OJ做题,希望通过做题学习和熟悉一些常用的算法。这是一道比较简单的模拟题,只要分情况讨论,一一求解即可1 首先把起点到终点的方向定为西北、西、西南、南,由8个方向减少到4个方向。2 考虑王的步数情况,分西北、西、西南、南四种情况考虑,对于西北方向,即终点在起点的左上方,则起点先沿西北方向走,当与终点平行的时候,再选择往西或者往东走到终点的位置,此时,走过的步数就是王的步数;对于西这个方向,直接从起点向西走到终点就是王的总步数;对于西南方.原创 2020-08-10 09:11:40 · 1703 阅读 · 0 评论 -
九度OJ
1.1016这是一道简单题,主要要考虑到,比如说108,8,2这种类似的情况,其中8被认为是08,所以最后两位相同,输出-1。#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char a[20], b[20], *p, *q;int k, a1, b1, len1, len2, a2, b2;while (scanf("%s%s%d", a, b, &a...原创 2020-08-10 09:09:51 · 952 阅读 · 0 评论 -
秋招编程题
一.京东2018第一题:疯狂的序列有一个序列1,2,2,3,3,3,4,4,4,4,5,5,5,5,5....,求第n项是多少?解法一:暴力法,i从1开始穷举,直到满足i(i+1)/2-i<n<=i(i+1)/2,则输出i,代码如下:#Include <stdio.h>int main(){long longn;while (scanf("%lld", &n) != EOF) {long long i = 1;while (1)..原创 2020-08-10 09:06:33 · 510 阅读 · 0 评论 -
leetcode
1.leetcode-1248. 统计「优美子数组」给你一个整数数组nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。暴力求解通不过所有用例:以begin为起点,内层循环向后遍历并计算奇数的个数,若奇数个数为k,则ans加1。begin.原创 2020-08-10 08:59:12 · 89 阅读 · 0 评论 -
排列组合
排列组合的基本公式为:实现A,C,并把他们封装称为一个函数,之后使用起来就会比较方便。int A(int n, int m){ int res = 1; for (int i = n; i >n - m; --i) { res *= i; } return res;}int C(int n, int m){ int res = 1; for (int i = n; i >n - m; -...原创 2020-08-09 12:11:04 · 203 阅读 · 0 评论 -
概率题
1.足球比赛class Championship {public: int Mod(int x,int y){ // 查找最大公因子 if(x%y==0) return y; else return Mod(y,x%y); } vector<int> calc(int k) { vector<int> vec(2,1); int num = 1...原创 2020-08-03 09:13:29 · 225 阅读 · 0 评论 -
智力题
1.涂色n*m的格子,选一种颜色涂色,不能相邻。考虑到n*m相乘奇数和偶数的情况。class Paint {public: int getMost(int n, int m) { return (n * m + 1) >> 1; }};2.赛马[1,2,3],[1,2,3],3尽可能多胜出class HorseRace {public: int winMost(vector<int> oppo, vector&l...原创 2020-07-29 23:01:33 · 113 阅读 · 0 评论 -
位运算
1.布隆过滤器(k个哈希函数)2.交换class Swap {public: vector<int> getSwap(vector<int> num) { num[0]=num[0]^num[1]; num[1]=num[0]^num[1]; num[0]=num[0]^num[1]; return num; }};3.比较class Compare {public...原创 2020-07-26 16:21:42 · 123 阅读 · 0 评论 -
大数据
知识点:1.哈希函数(MD5,SHA1)2.map_reduce和hadoop(1)map阶段,分发(2)reduce阶段,合并注意点:1.备份的考虑,分布式存储的设计细节,以及容灾策略。2.任务分配策略与任务进度跟踪的细节设计,节点状态的呈现。3.多用户权限的控制。相关应用场景:主要是利用分而治之的方法,要么分到不同的机器上,要么分配到不同的文件中。常用hashmap和bitmap,难点在于通信,时间和空间的估算上。1.使用map_reduce方法统计单词出现频原创 2020-07-26 15:52:59 · 110 阅读 · 0 评论 -
链表
1.环形链表插值从小到大环形列表class InsertValue {public: ListNode* insert(vector<int> A, vector<int> nxt, int val) { if(A.size()==0){ ListNode *node=new ListNode(val); node->next=node; return node; ...原创 2020-07-14 09:14:15 · 159 阅读 · 0 评论 -
字符串
2.词语变形假如输入为"abc",3,"bca",3,则输出为trueclass Transform { public: bool compareab(int a[],int b[],int minl) { int len=0; for(int i=0;i<256;++i) { if(a[i]!=0&&a[i]==b[i]) ...原创 2020-07-10 00:22:39 · 146 阅读 · 0 评论 -
栈和队列
1.可查询最值的栈定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。方法一.class Solution {public: stack <int> stackdata; stack <int> stackmin; void push(int value) { stackdata.push(value); if(stackmin.empty()||value<stackmin.top())...原创 2020-07-06 09:12:42 · 108 阅读 · 0 评论 -
查找
1.查找局部最小的数class Solution {public: int getLessIndex(vector<int> arr) { int n=arr.size(); if(n==0) return -1; else if(n==1) return 0; else if(arr[0]<arr[1]) return 0; else if(arr[n-1]<arr[n-2]) retur...原创 2020-06-27 12:03:09 · 150 阅读 · 0 评论 -
各种排序算法
1.冒泡排序整个排序过程为大的元素不断往后交换,每一轮排序排好一个元素。class BubbleSort {public: int* bubbleSort(int* A, int n) { int i=0; while(i<n-1) { int j=0; while(j<n-i-1) { if(A[j]>...原创 2020-06-23 22:47:16 · 197 阅读 · 1 评论 -
二叉树实践
1. 给定一颗二叉树,按层打印它。例如:输入: 1 2 34 5输出:12345使用队列来实现,首先让根节点进队列,然后根节点出队,同时让它的左右孩子节点依次进队列,依次类推,直到队列为空。2.有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树,并且把每一层的节点存在一个数组中。类似的有些题目可能要求打印完一层节点后需要换行。这道题其实就是上道题的变种,难点在于怎样确定每层的最后一个节点,其实每层最后一个节点即为最新进入队列的节点。实现代码如下...原创 2020-05-30 23:39:01 · 207 阅读 · 1 评论 -
动态规划
第一题:找零钱问题有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。分为有该种货币与无该种货币进行讨论,代码如下:class Ex原创 2017-09-08 11:49:20 · 434 阅读 · 0 评论