随笔分类 - LeetCode&NewCoder
摘要:题目描述:给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。这道题目做暴力的想法就是,用一个指针从头到尾遍历,删除哪个元素就把后面的元素统一向前移动一个位置。但是这样的时间复杂度很大,可能要移动很多的元素。这里利用快速排序中划分的一种思想:用两个指针,后一个指针做遍历用,前一个指针作...
阅读全文
摘要:算法分析1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.2. 若第一个非空格字符是符号+/-,则标记isPositive的真假,这道题还有个局限性,那就是在c++里面,+-1和-+1都是认可的,都是-1,而在此题里,则会返回0.3. 若下一个字符不是数字,则返回0....
阅读全文
摘要:题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 因为是中序遍历,所有要找的这个父结点,肯定有这样的特征:当前结点所在的子树一定是某个根结点的左子树。并且当前结点是该左子树的最右结点。 所以算法设计:...
阅读全文
摘要:Hash表能够实现在O(1)时间内对数据访问,虽然空间复杂度很高,但是时间复杂度很好。所以下面说一些使用Hash的算法。第一个只出现一次的字符利用Hash可以实现统计字符的个数,然后在遍历一次得到最早的那个只出现一次的字符。注意:如果传入的字符串为NULL或者字符串里没有只出现一次的字符,这两种情况...
阅读全文
摘要:删除链表中多余的重复结点I首先对于一个有序的结点递增的链表,删除重复的结点,只保留一份重复的结点。Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3. 只需要一个结点指针就能够完成操作。ListNode* deleteDup...
阅读全文
摘要:看下面一个链表结点的定义:struct ComplexListNode{ int val; struct ComplexListNode *next; struct ComplexListNode *sibling; ComplexListNode(int x) : val(x), next(NU...
阅读全文
摘要:Add Two Numbers这个题目是:把两个整型的数字用两个链表表示,然后把这两个数字相加,最后的结果仍然用链表表示。这个题目能很好的体现一个人对于这种算法题的解题思路,是很好的一个题目。这个题目很需要算法设计的那四个步骤:1.设计算法,通过举例子、画图、划分子问题(分治或DP)等方法。2.设计...
阅读全文
摘要:首先明确一点,这个方面的问题设计到的知识点是数组的查找的问题。对于类似的这样的查找操作的具体办法就是三种解决方法:1.暴力算法,多个for循环,很高的时间复杂度2.先排序,然后左右夹逼,但是这样会破坏原始数组的下表3.利用Hash表,直接定位元素,很少的时间复杂度 TwoSum先来看看最简单的,在...
阅读全文
摘要:题目Remove all elements from a linked list of integers that have valueval.ExampleGiven:1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6,val= 6Return:1 --> 2 --> 3 ...
阅读全文
摘要:题目Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't m...
阅读全文
摘要:题目Rotate an array of n elements to the right by k steps.For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].Not...
阅读全文
摘要:题目思路这个题目是一个easy级别,算法本身没有难点,但是C++的语法有几点需要注意。下面分别说一下:LeetCode中给的C++函数原型是这样的string countAndSay(int n); 也就是说给一个n得到一个string类型的数字串,但是n和这个数字串似乎没有什么关系,这个数字串是...
阅读全文