zoukankan      html  css  js  c++  java
  • 左耳听风 ARTS Week 001

    要求:
    1.每周至少做一个 leetcode 的算法题

    2.阅读并点评至少一篇英文技术文章

    3.学习至少一个技术技巧

    4.分享一篇有观点和思考的技术文章

    1.每周至少做一个 leetcode 的算法题

     

    算法题:14. 最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。
    
    如果不存在公共前缀,返回空字符串 ""。
    
    示例 1:
    
    输入: ["flower","flow","flight"]
    输出: "fl"
    示例 2:
    
    输入: ["dog","racecar","car"]
    输出: ""
    解释: 输入不存在公共前缀。
    说明:
    
    所有输入只包含小写字母 a-z 。

    解答:

    public class Solution {
        public string LongestCommonPrefix(string[] strs) {
                        if (strs.Length == 0) return "";
                String prefix = strs[0];
                for (int i = 1; i < strs.Length; i++)
                {
                    while (strs[i].IndexOf(prefix) != 0)
                    {
                        prefix = prefix.Substring(0, prefix.Length - 1);
                        if (String.IsNullOrEmpty(prefix)) return "";
                    }
                }
                return prefix;
        }
    }

    2.阅读并点评至少一篇英文技术文章

    此处拉下了。

    英文阅读不是很好,开始刷阅读量。最近在看《鲁滨孙漂流记 中英版》,花了一周,终于看完第一章。下一周目标看完2-3章。

     

     

    3.学习至少一个技术技巧

     

     

    关于Dictionary、HashTable、List<T>的比较,之前收藏的,今天回顾一下。

     

    Dictionary:
    1. 采用链表法
    2. 适合增删的动作很多( 因为解决碰撞的方式  是List.Add)
    3. 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
    4. 对于值类型,特定类型(不包括 Object)的 Dictionary<TKey, TValue> 的性能优于 Hashtable,这是因为 Hashtable 的元素属于 Object  类型,所以在存储或检索值类型时通常发生装箱和取消装箱操作
     
    HashTable:
    1. 采用开放寻址法
    2. 适合改动的动作很少  查询的动作很多
    3. 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用  Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护,  效率大减.
     
    Dic  和 List<T>
    1. List<T>是对数组做了一层包装,我们在数据结构上称之为线性表,而线性表的概念是,在内存中的连续区域,除了首节点和尾节点外,每个节点都有着其唯一的前驱结点和后续节点。我们在这里关注的是连续这个概念。
    2. 而HashTable或者Dictionary,他是根据Key而根据Hash算法分析产生的内存地址,因此在宏观上是不连续的,虽然微软对其算法也进行了很大的优化。由于这样的不连续,在遍历时,Dictionary必然会产生大量的内存换页操作,而List只需要进行最少的内存换页即可,这就是List和Dictionary在遍历时效率差异的根本原因。
    3. 根据value 的查找  dic 的效率是高于 List 的 但是遍历的话   则Dic 要差点。这就好比你要摘抄书里边的所有文字  是根据目录 查一个找一篇文章 快,还是直接从正文开始 从头到尾快遍历快一样。单独的找某一篇知道题目(key)的文章 当然是从目录快了
    4. 在Dictionary中,除了要存储我们实际需要的Value外,还需要一个辅助变量Key,这就造成了内存空间的双重浪费。
    5. 在尾部插入时,List只需要在其原有的地址基础上向后延续存储即可,而Dictionary却需要经过复杂的Hash计算,这也是性能损耗的地方。
     
    List<T>和 DataTable
    DataTable,IList性能比较
    1)二进制序列化的情况
    从测试结果可以看出,IList<T>序列化的文件大小比DataTable小得多,这意味着在数据传输中带宽占用小很多,所以在设计Remoting接口时尽量使用IList<T>作返回值。
    2)XML序列化的情况
    从测试结果可以看出,IList<T>序列化后的文件比同样比DataTable小,但差距已经没有二进制序列化那么明显了。而且IList<T>的二进制序列化和XML序列化相差很大,所以remoteing中建议使用二进制序列化。
    3)操作性比较
      DataTable有支持数据的提交、回滚、查询等强大的方法,但访问单元格内容的时候不方便,还要类型转换。
      IList<T>则访问项的属性比较方便,有属性自动提示,不用类型转换,有LINQ的协助也能实现强大的查询。

     

     

    4.分享一篇有观点和思考的技术文章

     

    白话解析,一致性哈希:http://www.zsythink.net/archives/1182

     

     

    小感想:第一次打卡,有点应付差事的感觉。下周开始认真完成。看到大家这么认真,真的是棒棒的~

     

     

  • 相关阅读:
    【Uvalive4960】 Sensor network (苗条树,进化版)
    【UVA 1151】 Buy or Build (有某些特别的东东的最小生成树)
    【UVA 1395】 Slim Span (苗条树)
    【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)
    【UVA 10369】 Arctic Network (最小生成树)
    【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
    【UVA 11183】 Teen Girl Squad (定根MDST)
    【UVA 11865】 Stream My Contest (二分+MDST最小树形图)
    【UVA 11354】 Bond (最小瓶颈生成树、树上倍增)
    【LA 5713 】 Qin Shi Huang's National Road System (MST)
  • 原文地址:https://www.cnblogs.com/amusement1992/p/10591331.html
Copyright © 2011-2022 走看看