zoukankan      html  css  js  c++  java
  • [睡前灵感and发散思维]由一个简单的数组比较问题而想到的

    前言

    据说,一只优秀的程序猿往往会有这样的经历,白天遇到一个绞尽脑汁也无法解决的问题,晚上睡了后,半夜在梦中会灵感涌现,立马起床,打开电脑,一气呵成。第二天如果不看注释,完全不知道自己找到了如此巧妙地解决方案。

    昨晚躺床上,无意中想到一个问题,突然灵感爆发,想到巧妙解决方法,差点想起床写下来,只是寝室已断电,不了了之。早上爬起来,脸都没洗,先把文章敲了。

    问题

    非常简单的一个问题,长度为100和101的AB两个数组,数值范围为0-99,含重复,找出来多出来的一个数。

    思路

    一开始想到的是先排序,然后一趟比较找出不同。 排序方法一开始自然想到标准的快排,对于数字,还有基数与计数。

    一想到计数,突然发现根本不需要排序,三次遍历可解。

    1. 遍历A数组,用数组Count计数;
    2. 遍历B数组,Count[B[i]]--;
    3. 遍历Count,值为-1的下标即为所求;

    举一反三

    然后思维就发散了,进一步想了下

    • 长度为100和100+n,找出多出的n个;
    • 找出相同的n个,即子集;
    • 对于三个数组,求子集(计数数组值为3的下标就是);
    • 对于两个数组,求其元素异同

    举三反N

    • 对于n个数组,求子集(计数为n为所求)
    • 对于n个数组,求其元素的异同

    举N反N^N

    如果题目没给的范围,或者不是数字,大数据量咋办、

    • 比如两个元素数组,找出其中一个不同的元素

    如果元素值是唯一的,hash,第二次遍历时,hash冲突的即为所求

    结论

    。。。

    结果是昨晚凌晨两三点才睡着,结论就是不能再想了,发散思维太可怕T^T。。

    程序猿容易用脑过度,晚上还是好好休息,别想太多,当然,梦中的突然灵感还是要立马爬起床写下来的,毕竟有时候百分之一的灵感更重要。。。

  • 相关阅读:
    hdu 6085 bitset优化
    hdu 6070 二分答案+线段树
    hdu 6069 区间筛
    hdu 6058 并查集
    CF 835D D. Palindromic characteristics 字符串hash
    (转)Linux整合apache和tomcat构建Web服务器
    iTunes备份文件路径
    mac下Apache添加限速模块mod_bw
    mac显示隐藏文件夹
    Mac OS X下HomeBrew安装卸载
  • 原文地址:https://www.cnblogs.com/wchukai/p/4341227.html
Copyright © 2011-2022 走看看