精华内容
下载资源
问答
  • 两个时间段的交集

    2021-04-27 10:02:04
    我们将时间段1固定在某个位置,让时间段2动态的去与他进行交会: 如图所示: 1、假设时间段1为“固定的未来时间段”(隧道),时间段2为“移动的当前时间段”(汽车); 2、1点时,二者没有交会,时间段2随着...

    如何比较两个时间段是否存在交集,在纸上画了半天,模拟是否存在交集,越想越乱,快迷糊了,最后灵光一闪,采用动态模拟法,搞定。

    假设时间段1的开始点为X,结束点为Y;时间段2的开始点为A,结束点为B。

    我们将时间段1固定在某个位置,让时间段2动态的去与他进行交会:

    如图所示:

    1、假设时间段1为“固定的未来时间段”(隧道),时间段2为“移动的当前时间段”(汽车);

    2、1点时,二者没有交会,时间段2随着时间缓缓的向前移动;

    3、2点时,时间段2的尾端B与时间1的头端X相交,二者开始产生交集;

    4、随着时间的推移,A端进入隧道,而B端可能驶出隧道;

    5、3点时,时间段2的头端A与时间1的尾端Y相交,二者结束交集;

    6、此后,二者老死不相往来。

    从上图演示来看,时间段的比较是有其特殊性的,时间段是一个特殊的集合,有两个非常重要的属性:一个是开始点小于结束点这个隐藏的属性;一个是时间段的长度。之前画草图比较时,忘了这两个重要的点,导致脑子越想越乱。

    所以,时间段的比较不能简单的采用集合取交集的方式进行,按照动态运行的方式进行比较更直观。时间段1和时间段2的交集情况如下:

    有交集:B > X && A < Y

    无交集:B < X || A > Y

     

    展开全文
  • 从此再无交集

    2009-11-23 10:08:00
    就这样无声无息了 从此再无交集 不留一点痕迹 我想我是没有力气再去挽回什么了 这样也好 一个人的日子烦恼也会少点吧一个人过了这么多年 不是也很好 只是那个孤单的秋千成了我们最后的回忆

     就这样无声无息了 从此再无交集 不留一点痕迹 我想我是没有力气再去挽回什么了 这样也好 一个人的日子烦恼也会少点吧一个人过了这么多年 不是也很好 只是那个孤单的秋千成了我们最后的回忆

    展开全文
  • 如果我们把创业都理解成我今天出去成立一个公司,明天上市,后天市值超越Facebook,对不起,从来没有过这样成功的例子。天底下哪里有这么一帆风顺的事?把你放在一马平川的大平原上,你凭着直觉沿着直线走,其实从...


    创业后记 ---- 百感交集的过来人

    如果我们把创业都理解成我今天出去成立一个公司,明天上市,后天市值超越Facebook,对不起,从来没有过这样成功的例子。天底下哪里有这么一帆风顺的事?把你放在一马平川的大平原上,你凭着直觉沿着直线走,其实从高空看下去,你走出来的路是弯的,是曲折的。创业也是一样,虽然心里有个目标,但是要达到那个目标,你得解决一个个实际的问题。人的路都是一步一步走出来的,而且这个路一定不是直线。
    --------------------------------------------------------------------------------------------------------------------- 周鸿祎

    年轻人就应该加班加到想明白自己该干什么为止

    软件开发的整个过程是充满风险的,经常性的延期就是最好的说明,并且大部分项目甚至未能实现与当初计利接近的任何日标。

    一个优秀的Coder住往有一项技能被严重低估:那就是,“降低风险的能力”包括但不限于代码解耦,异常处理.等等,通过各种细节段降低整个工程的风险,获得更高的成功率,当然这种能力以进一步扩展应用到,职业生活各个方面。

    今年一度被公司需要自己做出选择到底是走管理还是技术,当我夜夜加班写文档,回过头来看。我走偏了,目前创业公司的管理,落到了为了汇报而汇报的事务性工作上来。并且管理岗的领导理所当然的认为事务性的工作就是他们的工作。比如,我经常有一种错觉:周汇报表格写完了,工作完成了

    这一点,创业公司员工是丧失创新基因的根本原因。

    当我加班想明白,我不想干这个,还是继续走技术的道理更加踏实 的时候,我认为,可以了。是时候转身离去了。

    活不过3年的魔咒

    面对不可预知的暗藏势力,我们所能做的只有防范。花未全开月未圆,职场没有地方值得你久留,除非你是老板,打工地对于打工者来说说本质上都是过路站、别人家,而且这和老板好坏无关。

    分布式服务里面一个共识:Design for failure 在体量/规模非常大的情况下,小概育的事件发生几乎成了必然。同样当你在工作得足够久时候你会发现类似的事情在职场中,每天都在发生。

    创业公司活不过3年? 我们公司也没赚什么钱,不是依然活的好好的。魔咒一直在,我们任何时候都要保持警惕,让自身强大起来,逃脱魔咒的枷锁。

    需求和油泼面

    创业公司很少能踏踏实实做事,比如用户想吃一碗面,你端来了各种山珍海味,还不厌其烦的给用户说怎么怎么好吃,还怪用户。其实你只要稍微研究一下用户,他是个陕西人,给他一碗油泼面,无非就是拉条和扯面的选择,结果弄得自己也不知道用户为什么不喜欢山珍海味,用户也一直无法吃到自己想吃的面。

    用户不傻,一碗油泼面能填饱肚子,还不贵,如果吃了一次买上100碗还因此全国开了分店,岂不美哉。山珍海味不但贵还有可能吃坏肚子。反过来想想,山珍海味的利润高不假,但是我们做的东西真的是山珍海味嘛,如果是的话也会有人买单的。

    在这里插入图片描述

    收获

    虽然在创业公司身兼数职,在一定程度上无法沉浸于技术水平的修炼。但是在这同时我仍然得到了全方位塑造自己的机会,概括起来有以下3点提升尤为保贵:

    1. 文档书写水平有了很大提高

    不单单从企业所必须的名类审计材料,资质,知识产权而且从项且全周期:包括建设方案,概要、洋细设计的名类文档书写水平都有了很大提升,不夸张的说,诉讼材料我都写过。

    2.思考问题的角度有了很大提升

    通过和客户资询,对接,交流,对项目
    进行收集,理解,转化需求。使得我思考问题的
    角度不仅仅从一个研发人员出发,而是如何更加优质的服务客户

    3. 身经百战,文韬武略

    身在创业公司,会有很多机会体验不同的角色。如果机会正好,你会被包装成xx集团首席大数据处理、数据科学家,title 直升三级,和合作公司CTO 谈笑风生,极大的扩展了自己的边界,成为影响历史进程的关键人物!

    最后借用周鸿祎老板的话:

    把创业看成是一种心态,为了实现一个目标,孜孜不倦的去追求。只要你不满足于现状,想法设法去突破,那就是创业!!!




    赠品:一则小故事

    在这里插入图片描述

    这则小故事告诉我们一个简单的道理,Alway have plan B


    参考文献

    1.《出师表》
    2.《阿房宫赋》
    3. 周鸿祎:创业最好方法是先加入一家创业公司
    4. 企业创始人要有杀手直觉,够快够狠
    5. 拿到年终奖后马上辞职,厚道吗?


    那些年我写过的总结

    10年IT路,我从大约10年左右开始写年终总结,那时候的文章太矫情,而且透露出与年龄不相符的沉闷,一路走来,我改变了很多,但有一点没有改变,那就是前进的动力。

    2013年年中的关键词:生活

    2013年年底的关键词:温和的坚持,并且傻笑

    2014年年中的关键词:世间的事大抵如此

    2015年年中的关键词:earning my living,burning my soul

    2015年的关键词:少说多做

    2016年中的关键词:毕业

    2016年的关键词:努力,奋斗

    2017年中的关键词:让我们一起为梦想窒息!

    同期工作一年后对考研的回顾:

    2017年底的关键词:不断前进,永不回头

    2018年农历新年:只要思想不滑坡,办法总比困难多!

    2018年 研究所离职:费解

    2018年 年中:人生大事

    2018年底:成为一名优秀的程序员

    2019年:视线所及只剩生活

    2020年:谈投资

    2021年:创业三部曲


    以上内容纯属巧合,如有雷同,我也没有办法

    ALL RIGHTS RESERVED

    展开全文
  • 集合的交集可能你会说JDK已经提供了交集的功能,但是差集、补集并没有提供实现。于是,首先让我们动手重复造轮子,先实现一个交集功能,你会怎么实现呢? 我设计一个函数,需要两个入参,然后求他们交集,并返回。我...

    如何设计集合交集、差集、补集

    集合的交集可能你会说JDK已经提供了交集的功能,但是差集、补集并没有提供实现。于是,首先让我们动手重复造轮子,先实现一个交集功能,你会怎么实现呢?

    我设计一个函数,需要两个入参,然后求他们交集,并返回。我的实现如下。

    public static <T> Set<T> intersection(Collection<T> from, Collection<T> to) {
          Objects.requireNonNull(from);
          Objects.requireNonNull(to);
    
          Iterator<T> iterator = from.iterator();
          Set<T> result = new HashSet<>();
          while (iterator.hasNext()) {
              T var = iterator.next();
              if (to.contains(var)) {
                  result.add(var);
              }
          }
          return result;
     }
    

    当然,这里肯定还有不足的地方,比如性能,内存等等。

    JDK是如何设计的呢?

    既然JDK已经我们提供这个功能,看看官方是怎么实现的,有什么值得借鉴的地方呢?
    JDK在 AbstractCollection 提供了实现,主要是借助迭代器来实现的。

    public boolean retainAll(Collection<?> c) {
          Objects.requireNonNull(c);
          boolean modified = false;
          Iterator<E> it = iterator();
          while (it.hasNext()) {
              if (!c.contains(it.next())) {
                  it.remove();
                  modified = true;
              }
          }
          return modified;
      }
    

    但是这里有一个比较尬尴的地方是,使用 Arrays.asList() 返回的list调用 retainAll 就会抛出异常。原因是Arrays.asList 只是提供一种视图的list,不支持修改操作。

    那还要其他更好设计吗?

    当然有啊,guava库提供Sets的工具类,它提供集合交集、差集、补集等等功能。在了解guava是如何设计之前,先了解怎么使用它。

     Set<Integer> var1 = Sets.newHashSet(1,3,4,5,8);
     Set<Integer> var2 = Sets.newHashSet(3,4,6,9,12);
     Sets.SetView<Integer> var3 = Sets.intersection(var1, var2);
     System.out.println(var3);  
     // [3,4] 交集
    
    System.out.println(Sets.difference(var1, var2));
    // [8,1,5] var1的差集
    
    System.out.println(Sets.symmetricDifference(var1, var2));
    // [8, 1, 5, 9, 12, 6] 补集
    

    那么guava是如何设计的呢?
    迭代器。首先guava的自定义的迭代器 AbstractIterator

    public abstract class AbstractIterator<T> extends UnmodifiableIterator<T> {
       private State state = State.NOT_READY;
       private @Nullable T next;
    
       protected abstract T computeNext();  // 钩子函数
    
       /**
       * 实现接口Iterator的hasNext方法,状态state来判断是否还有下个元素
       */
       @Override
       public final boolean hasNext() {
        checkState(state != State.FAILED);
        switch (state) {
          case DONE:
            return false;
          case READY:
            return true;
          default:
        }
        return tryToComputeNext();
      }
    
      /**
      * tryToComputeNext方法用来计算下一个元素的值,并把值绑定到域next上。
      * 
      */
      private boolean tryToComputeNext() {
        state = State.FAILED; // temporary pessimism
        next = computeNext();
        if (state != State.DONE) {
          state = State.READY;
          return true;
        }
        return false;
      }
    
       /**
       * 实现了接口Iterator的next方法,并返回域next的值
       */
       public final T next() {
        if (!hasNext()) {
          throw new NoSuchElementException();
        }
        state = State.NOT_READY;
        T result = next;
        next = null;
        return result;
      }
    }
    

    Sets.intersection在内部使用匿名类重写了 AbstractIterator 类的 computeNext 方法。

    return new AbstractIterator<E>() {
        final Iterator<E> itr = set1.iterator();
        @Override
        protected E computeNext() {
          while (itr.hasNext()) {
            E e = itr.next();
            if (set2.contains(e)) {
              return e;
            }
          }
          return endOfData();
        }
    };
    

    方法调用时序图
    在这里插入图片描述

    再造轮子

    现在我们需要动手借助guava设计,仿造这样的迭代器,对之前轮子进行改进。

    参考guava的 AbstractIterator 迭代器,并简化一些状态的设计。

    abstract static class MyIterator<T> implements Iterator<T> {
        private boolean endOf = false;
        private T next;
        
        protected abstract T computeNext();
    
        @Override
        public boolean hasNext() {
            next = computeNext();
            return !endOf ;
        }
    
        @Override
        public T next() {
            return next;
        }
    
        protected T endOfData(){
            endOf = true;
            return null;
        }
    }
    

    使用迭代改进第一个设计的版本。

    public static <T> Set<T> intersection(Collection<T> from, Collection<T> to) {
        Objects.requireNonNull(from);
        Objects.requireNonNull(to);
        return new AbstractSet<T>() {
            @Override
            public Iterator<T> iterator() {
                return new MyIterator<T>() {
                    final Iterator<T> itr = from.iterator();
                    @Override
                    protected T computeNext() {
                        while (itr.hasNext()) {
                            T var = itr.next();
                            if (to.contains(var)) {
                                return var;
                            }
                        }
                        return endOfData();
                    }
                };
            }
    
            @Override
            public int size() {
                int cnt = 0;
                for (T t: from) {
                    if (to.contains(t)) {
                        cnt++;
                    }
                }
                return cnt;
            }
        };
    }
    

    guava的差集、补集都是类似的实现,如果你感兴趣的话,可以尝试把其他两个实现了。真的是长见识,迭代器还可以这样玩,优秀。

    展开全文
  • 翻译 | AI科技大本营参与 | Shawn编辑 | Donna[AI科技大本营导读]我们常常提及数据科学、机器学习和人工智能,也有一个整体的概念。但是,如果要清晰地说出三者的定义分别是什么,区别又是什么,相信能说出来的...
  • 判断两个区间有无交集

    万次阅读 多人点赞 2017-07-29 12:15:27
    有两个区间A[a1,b1], B[a2,b2],判断这两个区间有没有交集我们可以分为两种思维来判断: 1. 正向思维:判断所有相交的情况 /**判断所有可能相交的情况 * 1. A[1,5], B[4,8] A尾部与B首部相交(b1端必须在[a2...
  • 我们首先了解一下什么是交集 以前学数学的时候学过交集,其实这里也是一样 两个集合有重复的部分就叫做交集 作用:给所有选择器选中的标签中,相交的那部分标签设置属性 格式: 选择器1选择器2{ 属性:值;...
  • 朴素的想法是两两求交集,然后得到结果,又因为是有序的,两个有序结合求交集的方法,之前想的是遍历其中小的集合,在另一个集合里做二分查找,这样时间复杂度是O(m*lgn),m是小的集合的大小,n是大的集合的大小。...
  • 题目: 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = ...1、先对两个列表进行排序,可直接对比头尾元素,若列表1的头比列表2的尾要大时,说明他们两个没有交集。 2、比
  • 1.思考:我们要取两个链表的交集,就是相同结点,所以这些结点是链表la和lb中都有的,而且最后的结果要放在链表la中,所以我的想法是直接在la上进行操作,把la中有而lb中没有的结点直接删除即可。 2.具体思路是用两...
  • 求2个集合的交集

    2014-05-26 18:49:03
    1、HashSet中的值不能重复且没有顺序。 2、HashSet的容量会按需自动添加。 构造方法: HashSet() 默认相等比较器创建一个空的新实例。 HashSet(IEnumerable<T> collection) 把指定集合中的collection中的数据复制...
  • 给定两个数组,编写一个函数来...这里我们要求的是两个数组的交集 我们先遍历第一个数组 如果这个表中已经有这个数字了,那么val就+1 如果没有这个数字,那么就将这个数字放进表中并且给个默认的val 1 创建一个list
  • 本题来自于官方编辑的初级算法中数组分类下的一个题目。先看一下题目描述。 题目描述 LeetCode地址:两个数组的交集 最开始看到这个题目时,我的想法很简单,既然求...当我们输入为[2,1,2,1,2]和[2,2,1]时,输出值为[2
  • 在很多情况下我们需要使用一种具有插入元素和查找最大值元素的数据结构,这种数据结构叫做优先队列,如果采用普通队列,那么寻找最大元素需要搜索整个队列,开销比较大;如果使用排序数组,插入运算就需要移动很多的...
  • 349.两个数组的交集

    2020-10-07 13:14:39
    给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 说明: 输出结果中的...
  • leetCode使用js解决两个数组的交集Ⅱ 先上题目: ...下面是解体思路:本体是求两个数组的交集,重点是不能简单的去重,所以最直接的方法就是使用指针逐位对比数组,因为js中并没有指针的概念,所以我们
  • 题目 两个数组的交集 给定两个数组,编写一个函数来计算它们...不能再使用数组作为哈希表,因为数组作哈希表不能太大(如作为字母表),此题没有限定数值范围,不用数组。 当我们要使用集合解决哈希问题时,优先使用u
  • 如何求两集合的交集

    2020-03-15 17:39:02
    首先,我们先用for循环输入两个集合放到a、b两个数组中。 for(i=0;i<10;i++) { scanf("%d",&x[i]); } for(i=0;i<10;i++) { scanf("%d",&y[i]); } 用两个for循环和if语句来判断两个数组有没有...
  • 题目上要求求数组的交集,但是它没有啊,就需要转化为集合! 代码很简单: class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]: x = set(nums1) y = set(nums2) ...
  • 新的一周从简单开始,题目已经说了是集合操作,那我们还能有什么其他好考虑的呢,用STL中的hash表他不香吗(暂时没有用C手动建集合数据结构的欲望),C++代码如下: class Solution { public: vector<int> ...
  • 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的...
  • 在Linq中,我们可以使用Intersect和Except来进行集合运算: a.Interset(b) ----交集,a与b公有的部分 a.Except(b) ----差集,a有且b没有的部分 转载于:https://www.cnblogs.com/minideas/archive/...
  • 11-02 两个数组的交集

    2020-11-03 09:50:56
    我们首先建立两个set数组h, h1,在遍历第一个数组num1的时候,将数组中的元素压入到set数组h中去,之后遍历第二个num2数组,如果num2中的元素出现在h1中,则判断这个元素是否已经被压入到h2中,如果在h2中没有出现,...
  • 换句话说,不相交集是一组集合,其中没有一个项目可以出现在多个集合中。它也称为联合查找数据结构,因为它支持对子集的联合和查找操作。让我们从定义它们开始: 查找:确定特定元素位于哪个子集中,并返回该特定...
  • 现在, a.txt和b.txt两个文件的数据都是逐行呈现的, 我们来说说如何求他们的交集、并集和差集。a.txt和b.txt中的内容为(注意, 高中时学的集合具有互异性, 而文件中的行却不一定有互异性): taoge@localhost ...
  • Union 并集 Ninus 差集) Intersect(交集) 这些是ORACLE SQLPLUS语句中。因为 我们分入住表人员号 宿舍号 入住时间 搬出时间宿舍表宿舍号 容量。。等宿舍基本信息而入住人数,是靠入住表统计出来的。但是在调试...
  • 翻译 | AI科技大本营参与 | Shawn编辑 | Donna[AI科技大本营导读]我们常常提及数据科学、机器学习和人工智能,也有一个整体的概念。但是,如果要清晰地说出三者的定义分别是什么,区别又是什么,相信能说出来的...
  • 我记得我们在集合的Set类中,只是探究了怎么去往集合里添加跟删除元素,当然我们利用了集合的性质去做到移除重复的元素...但是我们仅仅知道集合的插入跟删除是没有太大意义的,我们重点知道,集合就一定有交集跟并集
  • 在Python里,或许我们没有这个烦恼,因为python里已经为我们提供了intersection这样的方法。 但是在Java里,就需要我们动一番脑筋了。这里浓重推荐下apache的CollectionUtils工具类。 方法签名如下所示: org....
  • java求集合的交集源码蒙德里安 Mondrian 是 Kristen LeFevre 在他的论文中提出的一种用于关系数据集的自顶向下贪婪数据匿名化算法[1]。 据我们所知,蒙德里安是最快的本地记录算法,同时保留了良好的数据效用。 尽管...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 451
精华内容 180
关键字:

我们没有交集