zoukankan      html  css  js  c++  java
  • 趣题

    1. 给你n个数,其中有且仅有一个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那一个数。(全部异或)
    2. 给你n个数,其中有且仅有两个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那两个数。

    3.给你一个数列,一次操作是指将某个数移到数列中别的位置上去,然后问最少要几次操作才能让数列变得有序。例如,数列7,1,3,2,6,5就只需要三次移动,把3移到2后面,把5移到6前面,再把7移到最后面即可。

    ps:这题其实就是一个最长上升子序列问题。因为整个操作过程实质上可以等价地看作是,把要移动的数先全部取出来,再挨个放回适当的位置。这就要求取出要移动的数后,剩下的那些数本身是有序的。若希望要移动的数越少越好,那也就等于说是剩下的不动的数要越多越好。

    4.给定一个图,你有一次机会将某条边的权值减半,用O(n^2)的时间求最短路。

    ps: 这题的正确算法呢,其实也不难,预处理S到所有点的最短路,以及T到所有点的最短路,然后枚举每条边,可以直接求出将这条边减半后必须经过该边的最短路.这样,枚举得出的最小值就是我们所求的最短路。

    5给定一个图,你有k次选一条边令其权值减半的机会,求最短路。

    ps:其实这题有一个非常巧妙的O(n^2·k^2)的算法,真不知是谁想出来的:把原图分成k+1层,从0到k分别标号。上面的层到下面的层有很多单向边,每条边都和原图上的某条边相对应,跨越了几层权值就打几次对折,表示我“走了一条权值减过的边”。因此,你当前走在第几层,就表示你已经用掉了几次减半机会。在这个有O(nk)个顶点的图上做最短路,其结果就是我们所要求的。

    6.在1到n中选取若干个数,要求如果选了x就不能选2x和3x,问共有多少种选择方案。例如,n=3时答案为5,这5种选法分别为{}, {1}, {2}, {3}, {2,3}。

    ps:把数字1放在方阵最左下角,然后不断在一个数的右边填上它的两倍,在其上方填上它的三倍。问题就等价地转化为,在方阵中选取若干个格子使得任意两个不相邻,求有多少种选取方案。这是一个经典的带状态压缩的动态规划问题。另外,遇到尚未出现过的数(即除2和3以外的素数)就再开一张新的表,然后用乘法原理把它们各自对应的方案数乘起来就是了。例如当n=20时,最终答案就等于下面这7张表各自所对应的选取方案数的乘积。

    这题也许还有组合数学方法,但下面这个加强版估计就只能这样做了:如果再给定一些不能选的数,则又有多少种选择方案.

  • 相关阅读:
    解决Maven项目 Missing artifact jdk.tools:jdk.tools:1.7的错误
    Hive三种不同的数据导出的方式
    【万字总结】图解堆算法、链表、栈与队列(多图预警)
    精心收集的Hadoop学习资料(持续更新)
    [大牛翻译系列]Hadoop 翻译文章索引
    sql server代理服务无法启动(SQL Agent):OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2).
    【转】sql server迁移到mysql
    linux shell中的EOF
    yum源出问题,rpmdb: BDB0113 Thread/process 17276/140338032428864 failed: BDB1507 Thread died in Berkeley DB library
    linux网卡出现问题:Job for network.service failed because the control process exited with error code问题
  • 原文地址:https://www.cnblogs.com/tiankonguse/p/2649600.html
Copyright © 2011-2022 走看看