如何高效产生m个n范围内的不重复随机数(m<=n)

最近看到一道算法题,如何取100以内不重复的100个随机数?答案如下:

1
2
3
4
5
6
7
8
9
10
var nums = new int[100];
var list = new List<int>();
var random = new Random();
for (int i = 0; i < 100; i++)
{
int r;
while (list.Contains(r = random.Next(0, 99))) { }
list.Add(r);
nums[i] = r;
}

个人感觉题目很经典,实际生活中会经常遇到类似问题,但答案却如此低效,不免有一些失望,打开vs试了一把,果然2分钟都没跑完。

如果用上面的算法,把m、n放大到10000,估计程序1天都跑不完,效率令人发指。百度一下,发现《编程珠玑》一书收录该算法,题目为“如何高效产生m个n范围内的不重复随机数(m<=n)”。

那么该书中是如何解决该问题的呢?答案如下:

阅读更多

收缩VMware虚拟机中Mac系统的vmdk文件

博主标准穷屌丝一枚,虽然一直眼馋mbp,但苦于手头米有限,只是在虚拟机中玩玩MacOS。(我才不会告诉你我笔记本i5+120SSD+500HHD+12G内存,跑MacOS虚拟机一点不卡,貌似还是摆脱不了我是穷屌丝的事实,哎)

今天把虚拟机中的Mavericks升级到Yosemite,准备看看iOS8的新特性,开发个通知中心的app玩玩,谁知道虚拟机vmdk的文件从20G飙升到了38G,120G的ssd果断爆了,虽然系统是升级完成了,但是xcode却没有空间安装了。

阅读更多

样式布局分享-基于jQuery EasyUI的后台管理系统

最近做了一个简单的后台管理系统,其中用到了 jQuery EasyUI 框架,在此把首页布局代码分享给大家,希望大家可以用得上,具体效果如下图。

阅读更多

《Node.js开发指南》MicroBlog 项目的问题汇总

最近啃完了《Node.js开发指南》一书,并按书中 Demo 敲完了的所有代码。Node.js 发展的很快,书中使用的组建目前都已经是旧版本,导致 Demo 并不能正常运行,博主记录了开发 MicroBlog 项目时遇到的所有问题,特此分享给大家。

  • 问题一:

    1
    2
    3
    4
    5
    // 安装 ejs 模板的语法有问题,安装不成功,如下:
    express -t ejs microblog
    // 需要改成:
    express microblog -e
  • 问题二:

    1
    2
    3
    4
    5
    6
    7
    <!-- partial 方法已经不能用了,可以用include代替,如下: -->
    <ul><%- partial('listitem', items) %></ul>
    <!-- 需要改成:-->
    <% items.forEach(function(listitem){ %>
    <% include listitem %>
    <% }) %>

阅读更多

解决Visual Studio“加载...符号缓慢”的问题

最近在用 Visual Studio 调试时,经常出现“加载….符号缓慢的问题”,快的时候5分钟能出来,慢的时候就直接死掉了。

我一直以为是解决方案中的项目太多导致的(100多个项目),嫖过度娘才发现这是个普遍存在的问题,而且 VS2005、VS2008、VS2010、VS2012、VS2013 均有可能出现这个问题,原因是加载符号是需要联网下载,所以耗费了大量的时间。

具体解决方法如下:
1.打开VS的 工具->选项->调试->符号
2.取消勾选“Microsoft符号服务器”
3.点击“清空符号缓存”按钮
4.重启 Visual Studio

完成以上三步即可解决该问题,大伙可以参考一下。

阅读更多