
c++
ClaraR
这个作者很懒,什么都没留下…
展开
-
LeetCode|C++|2. Add Two Numbers
基本思路:分别从左到右遍历两个链表,对应数字相加,相加得到的和若大于10则产生进位,进位加到下一次运算中,用sum/10得到进位,sum%10得到本位,本位作为当前运算结果添加到新链表末尾 为了将长度不等的链表和长度相等的链表两种情况结合起来,在一个循环中做判断:如果两个当前指针都不为NULL,则获取对应数字;如果其中一个指针为NULL,也即遍历到了末尾,则在接下来的运算中该链表数字始终置为0。...原创 2019-01-17 14:57:48 · 213 阅读 · 0 评论 -
LeetCode|C++|1. Two Sum
好久没写C++了,这次把以前用java做过的题用C++再做一次,生疏了很多,各种查语法,心累... 这道题最简单的做法就是用一个哈希表存储数组中的元素和对应的下标。 1、对数组进行一次循环,边插入当前元素nums[i]边查找哈希表中是否已经存在target-nums[i],如果有的话直接返回两个下标; 2、循环一次过后如果没有符合条件的元素要记得抛出一个异常。 class Solutio...原创 2019-01-16 19:21:06 · 495 阅读 · 0 评论 -
LeetCode|C++|20. Valid Parentheses
class Solution { public: bool isValid(string s) { stack<char> ss; char c; for (int i = 0; i < s.size(); i++){ switch (s[i]) { case '(':ss.push(s[i]); break; case '[':ss.pu...原创 2019-01-21 10:47:31 · 152 阅读 · 0 评论 -
LeetCode|C++|203. Remove Linked List Elements
class Solution { public: ListNode* removeElements(ListNode* head, int val) { ListNode *L=new ListNode(0); L->next=head; ListNode *p=L; while(p->next){ ...原创 2019-01-20 22:12:45 · 147 阅读 · 0 评论 -
LeetCode|C++|142. Linked List Cycle II
基本思路:用快慢指针可以确定环的长度a+b,a为入环之前的长度,b为环里走的长度,再用一个指针从头和慢指针一块走,相遇的位置就是入环节点 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode *det...原创 2019-01-20 19:12:29 · 139 阅读 · 0 评论 -
LeetCode|C++|141. Linked List Cycle
基本思路:使用快慢指针,若发现两个指针指向同一个节点则说明链表有环 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: bool hasCycle(ListNode *head) { if (head == NU...原创 2019-01-20 18:46:12 · 246 阅读 · 0 评论 -
LeetCode|C++|92. Reverse Linked List II
基本思路:反转从位置 m 到 n 的链表。反转的基本操作是遍历时将节点摘下插入到链表头部,这里则是插入到反转的起始位置 1、先找到要进行反转的起始位置 2、n-m得到摘下的节点个数,要进行n-m次摘下插入操作 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ...原创 2019-01-20 18:30:16 · 231 阅读 · 0 评论 -
LeetCode|C++|206. Reverse Linked List
基本思路:遍历链表,不断把节点摘下来插到链表头部,记得不要断链 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* reverseList(ListNode* head) { if (head...原创 2019-01-20 18:08:50 · 276 阅读 · 0 评论 -
LeetCode|C++|86. Partition List
基本思路:在遍历过程中,用一个指针m指向最后一个小于x的节点,在一个循环中指针p跳过所有大于等于x的节点,将小于x的节点p插到m节点后,同时更新指针p和指针m。 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ...原创 2019-01-20 17:40:07 · 278 阅读 · 0 评论 -
LeetCode|C++|82. Remove Duplicates from Sorted List II
基本思路:在链表添加一个头结点,指针m指向头结点,q指向head,p指向head->next,用一个循环跳过所有和q相等的节点 1、若存在多个和q相同的节点,则循环结束后p指针指向第一个和q不相等的节点,把m节点直接连接到p节点 2、若不存在和q相同的节点,则不作操作,所有指针向前移动一个位置 struct ListNode { int val; ListNode *next;...原创 2019-01-20 16:24:03 · 266 阅读 · 0 评论 -
LeetCode|C++|83. Remove Duplicates from Sorted List
其实这道题很简单,因为是已经排好序的链表,所以只要用一前一后两个指针判断对应节点是否相等就可以了,我做的时候没注意看是排好序的,所以就用了一个通用的方法,不管有序还是无序都可以用,用一个map保存已经出现过的数字,当遍历到一个节点就检查这个节点的数字是否已经存在在map里面,如果存在则删掉节点,如果不存在则添加到map里面。 struct ListNode { int val; ListN...原创 2019-01-20 15:45:52 · 105 阅读 · 0 评论 -
LeetCode|C++|61. Rotate List
基本思路: 1、链表向右循环k个位置,若k大于链表长度,则相当于向右循环k%len个位置。 2、循环的操作相当于不断将最尾节点摘到链表前。 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNod...原创 2019-01-20 15:21:51 · 265 阅读 · 0 评论 -
LeetCode|C++|24. Swap Nodes in Pairs
在链表前面增加一个头结点(无有效信息),指针p指向头结点,指针q指向第一个节点,指针m指向第二个节点,第一个节点和第二个节点交换后,三个指针往前移动2个节点,继续进行交换,注意最后返回的是头结点的next指向的节点而不是head指向的节点 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(N...原创 2019-01-20 13:34:29 · 333 阅读 · 0 评论 -
LeetCode|C++|23. Merge k Sorted Lists
基本思路:两两归并,递归调用mergeTwoLists函数,最终合成一个链表 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListN...原创 2019-01-17 22:41:30 · 298 阅读 · 0 评论 -
LeetCode|C++|21. Merge Two Sorted Lists
基本思路:利用merge算法就可以 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { publ...原创 2019-01-17 22:07:42 · 133 阅读 · 0 评论 -
LeetCode|C++|19. Remove Nth Node From End of List
方法:在链表前添加一个头结点,这个头结点没有有效信息,只是为了方便跟踪删除节点的前一个节点。 然后使用双指针p和q,再加上一个pre指针,q指针先移动到顺数第n个位置,然后三个指针一起移动,p指针指向的元素就是要删除的元素,删除操作要用到pre指针 class Solution { public: ListNode* removeNthFromEnd(ListNode* head, in...原创 2019-01-17 21:50:54 · 168 阅读 · 0 评论 -
LeetCode|C++|4. Median of Two Sorted Arrays
中位数:一组有序数字里面最中间的那个数 (奇数个数)或者最中间两个数的平均数(偶数个数) 三种方法: 1、首先想到的是把两个数组按升序merge起来,直接取最中间的那个数(或者中间两个数的平均数),时间复杂度O(m+n) 2、第一种方法的缺点是要把所有元素都进行排序才能直接取最中位数,但是我们只需要取中位数,其实当排序排到中间那个数的时候后面的元素就不需要排了,我们可以边排序边count元素...原创 2019-01-17 21:02:01 · 118 阅读 · 0 评论 -
学习笔记|C++|数据结构|哈夫曼树,哈夫曼编码
今天把哈夫曼树又实现了一遍。主要使用了C++的STL的priority_queue优先队列实现哈夫曼树的构建。优先队列的底层其实是小顶堆(或大顶堆),哈夫曼树的构建用到的是小顶堆啦,因为每次都是从优先队列中弹出最小的两个元素,也就是小顶堆顶的两个元素。优先队列的语法是这样的: #include <queue> #include <functional> using na...原创 2019-03-12 01:44:56 · 555 阅读 · 0 评论