数据结构
文章平均质量分 54
Emmmwzh
已经成为一只码农
展开
-
不用乘法或加法增加8倍。现在用同样的方法增加7倍
1、增加8倍:就是乘2的3次方,左移三位即可2、增加7倍:7 = 1+2+4,因为左移后的补位是0,所以用或运算符或者异或都可以达到加法效果,a=1,b=a原创 2018-01-01 16:42:28 · 1244 阅读 · 0 评论 -
n个数字(0,1,…,n-1)形成一个圆圈
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。以前叫约瑟夫环,用队列水过去,当然他明显是个数学题,参考一下别人的思路,自己再推一下公式吧。原创 2018-01-03 22:32:20 · 2930 阅读 · 2 评论 -
斐波那契数列,用最快的方法求该数列的第n项
题目:定义Fibonacci数列如下: / 0 n=0f(n) 1 n=1 \ f(n-1)+f(n-2) n=2 输入n,用最快的方法求该数列的第n项。分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。最快当然是矩阵快速幂了{fn,fn-1} * {1,1原创 2018-01-03 23:17:21 · 3834 阅读 · 0 评论 -
Unity几种常用的设计模式
1、单例模式:某个类只能有一个实例,单例非常重要,比如我需要管理游戏的UI,现在我要关闭某个页面,页面上可能打开很多子窗口也需要一起关闭,这时候用一个单例来统一管理就很好解决这个问题。单例模式一般都是xxxController、xxxManager等,可以这么写。public abstract class SingleTon where T : SingleTon, new() {原创 2018-01-04 04:43:05 · 20884 阅读 · 1 评论 -
输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
网上都说是DP结果写了个递归,其实就是个简单的DFS,要解一个最优解才可能用上DP。不喜欢递归可以用栈模拟递归。#pragma warning(disable:4996)#include #include #include #include using namespace std;#define N 1005int Solve(int cur,int max,int num){原创 2018-01-06 13:17:55 · 445 阅读 · 0 评论 -
左旋转字符串
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路:把ab旋转为ba,把cdef旋转为fedc,这时字符串是bafedc,旋转整个字符串旋转得到cdefab。原创 2018-01-06 14:25:35 · 99 阅读 · 0 评论 -
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。 这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。思路:设f(n)是n阶台阶的总跳法当n=1时跳法为1当n=2时跳法为2当n>2时,如果第一步跳一步,则跳法就原创 2018-01-06 14:29:03 · 1473 阅读 · 0 评论 -
有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接, 问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接, 问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。很久没做算法题有点摸不着头脑,查了一下其他人的做法是floyd,就是那个O(n^3)的最短路算法,当年我的总结是可以求出任意两点的最短路。如何判断循环,应该就是dis[i][i]上有值吧。那就写个核心算法吧。fo原创 2018-01-08 13:29:47 · 452 阅读 · 0 评论 -
求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。思路:设s原创 2017-12-27 17:09:49 · 115 阅读 · 0 评论 -
字符串的组合(有重复字符)
如果没有重复的字符,比如abc,则可以用简单的选入队列和不选入队列来枚举所有组合,如果是有重复字符比如aabb,按照原来的算法会ab,ab,ab,ab或者aab,aab,abb,abb,所以需要改进一下删去一些重复的情况,分析例子可以知道出现重复的原因是同一种字符在多层递归中组合选择了同一数量造成的,比如aabbb,会出现abb,abb,在a后的选择中bb出现两次,为了防止这种情况,我们可以先去重原创 2018-01-25 23:49:38 · 766 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
用桶排序的思想记录一下就可以了,感觉这个字符是个坑,应该不只是字母。原创 2018-01-03 17:09:25 · 264 阅读 · 0 评论 -
输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。#pragma warning(disable:4996)#include原创 2018-01-03 16:50:47 · 1213 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果原创 2018-01-02 16:39:44 · 200 阅读 · 0 评论 -
翻转句子中单词的顺序。
翻转句子中单词的顺序。题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。先把整个字符串翻转一次,然后再把每个词翻转一次#pragma warning(disab原创 2018-01-02 16:56:33 · 181 阅读 · 0 评论 -
把二元查找树转变成排序的双向链表
把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16#pragma warning(disable:49原创 2017-12-27 16:19:34 · 130 阅读 · 0 评论 -
设计包含min函数的栈
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。两个栈,一个是实际输入的数据,另一个维护递减队列。原创 2017-12-27 16:42:04 · 125 阅读 · 0 评论 -
求二叉树中节点的最大距离
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。思路:距离最长可以认为是某棵子树的左子树最深加上右子树最深,每一层递归都是当前节点处理两个子节点,每层返回当前子树的最大深度和左右子树深度和的最大值,其中返回当前子树的最大深度是用来原创 2018-01-03 15:42:53 · 321 阅读 · 0 评论 -
在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。注意:这里没说节点都是正的,所以原创 2017-12-27 19:08:12 · 137 阅读 · 0 评论 -
查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。想当年一个sort打遍天下,前些日子面试sort回宿舍自己打脸,用multiset,nlogk带走#pragma warning(disable:4996)#include #include #include #include #incl原创 2017-12-27 20:32:25 · 116 阅读 · 0 评论 -
求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
#pragma warning(disable:4996)#include #include #include #include using namespace std;#define N 1005int ans = 0;bool Sum(int n){ ans += n; return (n - 1) && Sum(n - 1);}int main(){ int n原创 2018-01-03 16:15:46 · 212 阅读 · 0 评论 -
贪吃小怪兽介绍之动画同步
自己写一个Animation叫GAnimation,用组件的方式添加到Player类中,这不是一个框架,而是一个类似于状态机的东西,我使用的是Animation动画,然后给每个动画定义优先级,比如攻击的优先级小于被攻击,即是说一个人的攻击可以被打断,类似这样的。辅助类有Trigger和GAnimationClip(带动画帧事件)。如何做到同步,如果数据是同步的,那么我只要根据数据来一帧一帧播放,来...原创 2018-09-13 17:32:31 · 283 阅读 · 0 评论