LeetCode Linked List & Math & Two Pointers 总结

来源:互联网 发布:安卓ocr软件 编辑:程序博客网 时间:2024/06/05 18:39
重温链表Linked List,总结一些问题:
   1.链表中如果表示这个链表里没有元素,应该恒等于null,而不是0.(Mergo Two Sorted Lists);
   2.在遍历链表的时候,要使用到节点指针,访问是从列表的头部开始移动,遍历整个列表的节点,应该从下一个节点开始做处理。(Remove Duplicates from Sorted List )(Remove Linked List Elements);
   3.在链表中,常见一种迭代的方法,迭代用通俗的方式来讲,就是将输出的作为输入的,一种重复性操作,有点儿像循环,就像我们面对镜子,看到镜子显示的自己。

对于链表,掌握起来还算简单的,主要是靠逻辑性。同样也是靠逻辑性的还有Math
   1.char[] a = new char[s.Length] 在表示数组的时候后面的重载要用"[]",不注意就会忘记使用"()"。(Roman to Integer)
   2.牛顿-拉夫森公式X(n+1)=(Xn+a/Xn)/2计算平方根,循环计算,知道等于给定值位置。(Sqrt(x))
   3.string.Insert(int startIndex,string value)方法,在原来字符串的基础上在指定位置山个插入想要插入的字符串后得到一个新的字符串。第一个参数为要插入的开始位置,潜在的异常是此参数的值为负数;第二个参数是要插入的值,潜在的异常是这个值为空。(Excel Sheet Column Title)
   4.StringBuilder与String相比,只有基本的属性和增删改的方法,StringBuilder是由Char数组构成的,构成新的StringBuilder时能设置容量的大小,当添加字符串超过已分配额数组大小时,就会创建一个新的数组,新的数组的容量翻倍,旧的数据就会被回收,StringBuilder多数方法都是返回同一个StringBuilder对象。
   5.string.Insert(int startIndex,string value),在原来字符串的基础上在指定位置上插入想要插入的字符串后得到一个新的字符串,Insert这个方法是直接插入而不是替换掉原来的相应位置的字符。
   6.char.Parse()转换成char类型,String.Substring(int index,int length)表示从index开始返回长度为length的字符串。(Excel Sheet Column Number)
   7.String.Contains()在指定String对象中是否包含指定字符串,返回值为bool型,即true和false,还有一种方法也可以判断一个字符串中是否包含另一个字符串,String.IndexOf(),但IndexOf()是在字符串中寻找参数字符串第一次出现的位置并返回该位置,返回的是int类型,如果没找到,那么返回-1。(Happy Number)
   8.在判断一个数是否是2的幂时,最先想到的方法是直接判断,但这种方法存在着误区,以二进制的形式来判断这种方法不太容易考虑到。(Power of Two)
     
还有就是Two Pointers中存在的一些问题,这一类题的逻辑性也比较强:
   1.在判断一个数组中前后遍历的两个元素是否相同时,不能直接都以for遍历整个数组,要有一个主体。(Remove Duplicates from Sorted Array)

   2.当循环中的条件不满足时需要跳出结束单次循环时应该用Contiune,而break是跳出整个循环。(Remove Element)

   3.使用快慢指针来判断是否是循环就是判断前后指针所指向的数是否相同,知道相同的时候这歌链表就有一个循环,不用快慢指针也可以实现这个思路,但是需要用到哈希集,只要判断当前节点的引用是否在哈希表中(Linked List Cycle)

   4.str.ToCharArray()把字符串中的每个字符提出然后存在一个数组中返回,Array.Reverse()方法指反转整个一维Array中元素的顺序,StringBuilder对比于string效率高得多,可多次对一个字符串进行多次操作,也不需要分配内存空间,其中Append方法表示将信息追加到当前StringBuilder的结尾。(Reverse String)

   5.Count()表示元素的个数,用于由多个对象组成的类,比如说集合List,Hash Table,而Length是指长度,是作为一个整体看待,一般面向对象String。