• 左耳听风 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

     

     

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

     

     

  • 相关阅读:
    0x05 排序
    bzoj3032: 七夕祭
    0x04 二分
    bzoj2783: [JLOI2012]树
    bzoj3192: [JLOI2013]删除物品
    bzj1106: [POI2007]立方体大作战tet
    POJ2299Ultra-QuickSort
    POJ3080Blue Jeans
    POJ3253Babelfish
    POJ1611The Suspects
  • 原文地址:https://www.cnblogs.com/amusement1992/p/10591331.html
Copyright © 2020-2023  润新知