数据结构题目

1. 第K个置换序列

  set[1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the permutations in order, We get the following sequence (ie, forn= 3):

  "123"
  "132"
  "213"
  "231"
  "312"
  "321"

  Given n and k, return the kth permutation sequence

  先求第一位上的数字:固定第一位上的数字,后面可能的情况是 (n-1)!,则第一位上的数字为 k/(n-1)!

  同理第二位上的数组 k%(n-1)!/ (n-2)!

  依次往下

2. 贪心,动态规划,搜索:

  每个阶段只有一个状态->递推;
  每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心;
  每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索;
  每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划

3. 最大子数组问题:这里用分治法

  把数组等分成Aleft,Aright两部分,那么最大子数组有三种可能情况,在Aleft/Aright中,或者跨越这个两个子数组,前两者可以递归求解,跨越两个子数组如何求解呢?从分割点,往前遍历,求得left最大值(以mid结尾),同理可以求得right的最大值。两者相加即跨越两个子数组的最大值。时间复杂度是O(nlogn)

  一种O(n)复杂度的解法是:假设已求得 i 之前的最大子数组和max_so_far,下一步则是要求 i + 1以前的所有最大子数组,此时最大的子数组为max(max_so_far,max_ending_i+1),此时转化成求解max_ending_i+1的问题,max_ending_i+1 = max(max_so_far + a[i+1], a[i+1])

4. 有这样一种编码:如,N=134,M=f(N)=143,N=020,M=fun(N)=101,其中N和M的位数一样,N,M可以均可以以0开头,N,M的各位数之和要相等,即1+3+4=1+4+3,且M是大于N中最小的一个,现在求这样的序列S,N为一个定值,其中S(0)=N,S(1)=fun(N),S(2)=fun(S(1))。

  》首先将数字转化为字符串,字符串的开始是数字高位,字符串的末尾是数字低位

   》从字符串末尾往前扫描,找出第一个大于0的数字,减1

   》继续往前找,找到第一个小于9的数字,加1

   》将该位之后到末尾的字符重新排序(不包括该位),即可得所求结果

5. 静态方法里面为什么不能声明静态变量?

  静态变量属于他所在的类,而静态方法中的静态变量的作用域只在这个静态方法内,所以不能声明静态变量。

6. 如果让你设计一个类,什么时候把变量声明为静态类型?
  当类的所有对象都和一个变量相关时,声明为静态变量。

7. 抽象类和接口的具体区别是什么?
  抽象类可以有方法的实现,接口没有方法的实现。抽象类一般是本质的东西,比如人,而接口一般是附加的东西,比如会飞,flyable,跑,runnable. 抽象类可以没有抽象方法,而接口只能有抽象方法,抽象类有构造方法而接口没有构造方法。java只能单继承,不过可以同时实现多个接口。

8、给定n个实数  ,求着n个实数在实轴上向量2个数之间的最大差值,要求线性的时间算法。 

  将这n个实数排序,求相邻元素的最大值,但是时间复杂度是O(nlgn),不满足线性的要求。通过分桶方法完成近似排序。

  step1:遍历n个数找到max和min

  step2:对剩余的n-2个数,映射到n-1长度为(max-min)/n-1个小桶内,将这个n-2个数分到这n-1个桶内,并求每个桶的max和min。并且注意到这n-1个桶至少有一个桶是空的,那么最大差值一定不再桶内出现,而在相邻桶之间出现。

  step3:遍历min1,max1,min2,max2....,O(n)时间找出相邻元素的最大差值。

9. 输入文件的第一行是一个正整数T, 代表测试数据的数量. 接下来T行, 每行为一个测试数据, 有两个数字, 第一个数字为一个十进制小数d, 为面试官出的题目里的数字, 0<=d<=10000, 且小数点后的数位都是4位; 第二个数字是一个非负整数k(1<=k<=100), 代表要给出的答案小数点后需要输出k位.

输出描述:对于输入文件里的每个测试数据, 输出相应的答案, 答案的格式为n(10)=m(2), 具体可参照样例输出.


样例输入

3

7.7000 3

0.5000 5

3.1416 2

样例输出:

7.7000(10)=111.101(2)

0.5000(10)=0.10000(2)

3.1416(10)=11.00(2)

整数部分转换2进制,从右往左,除二取余;小数部分从左往右,乘二取整。

时间: 2024-09-06 16:11:40

数据结构题目的相关文章

约瑟夫环问题,一道经典的数据结构题目

问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 一般我们采用一个循环队列来模拟约瑟夫环的求解过程,但是如果n比较大的时候,采用模拟的方式求解,需要大量的时间来模拟退出的过程,而且由于需要占用大量的内存空间来模拟队列中的n个人,并不是一个很好的解法. 在大部分情况下,我们仅仅需要知道最后那个人的编号,而不是要来模拟一个这样的过程,在这种情况下,可以考虑是否存在着一种数学公式能够直接求出最后那个人的编号. 我们知道第一个人(编号

程序员代码面试指南 IT名企算法与数据结构题目最优解 ,左程云著pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介  · · · · · ·这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失.“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联系,使知识的学习避免碎片化

可持久化数据结构题目泛做。

个人理解: 每个新的线段树的一个结点保存的是1...位置 i中的数字在相应的区间上有几个. 然后我们用r-(l-1)得到的就是l...r上的中字在相应的区间中出现了几个. 题目1 POJ2104 题目大意:静态查询区间第K小值. 裸的可持久化线段树. 1 #include <cstdlib> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstdio> 5 #include <cstr

南阳oj NYOJ 动物统计加强版 数据结构 题目290

 /*动物统计加强版 时间限制:3000 ms  |  内存限制:150000 KB 难度:4 描述 在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单.科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙. 输入第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数

南阳oj 数据结构 题目739 笨蛋难题四

 /* 笨蛋难题四 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 这些日子笨蛋一直研究股票,经过调研,终于发现xxx公司股票规律,更可喜的是 笨蛋推算出这家公司每天的股价,为了防止别人发现他的秘密.他决定对于这家公司的 股票最多买一次,现在笨蛋已经将股票价格列了出来.(这已经不是笨蛋的难题了,他已经解决 呵 呵).只想难为难为你呀,从股票价格表上,你能算出笨蛋的每股股票最多能赚多少钱吗? 输入第一行一个n,表示n天(小于100000) 第二行 给出n天每股的价

算法和数据结构

1.设计包含min函数的栈[数据结构]   题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 2.子数组的最大和[算法]   题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为

可持久化数据结构

可持久化数据结构 题目链接:http://acm.xidian.edu.cn/problem.php?id=1181 用vector实现可持久化 这题要求的是一个支持区间查询的可持久化数据结构.这里使用vector巧妙地实现:pair<time,value>用pair存储时间戳以及当前时间的值,query的时候使用二分查找即可. 代码如下: 1 #include<cstdio> 2 #include<vector> 3 #include<iostream>

6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)

Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式] 第1行:一个整数n,表

数据结构 递归和非递归方式实现二叉树先序、中序和后序遍历

二叉树的先序遍历顺序是根.左.右:中序遍历顺序是左.根.右:后序遍历顺序是左.右.根. 递归方式实现如下: 1 public class TreeNode { 2 private int value; 3 private TreeNode left, right; 4 5 public TreeNode(int data) { 6 value = data; 7 } 8 9 // 递归方式实现先序遍历 10 public void preorder(TreeNode treeNode) { 11