数据结构
Lzed
我好菜啊
展开
-
Codeforces722D-Generating Sets(set + 二分答案)
题目链接http://codeforces.com/contest/722/problem/D思路最大值最小问题,显然二分 二分一下最大值的大小,然后每次去judge judge的思路:设上限为y,对于一个元素x,首先缩小到x≤yx \leq y,然后如果集合里面已经存在x了,那么x=x/2x = x / 2,直到能够插入x细节答案是在judge函数里面插入的,二分的时候如果judge(L) M原创 2016-10-06 20:33:17 · 280 阅读 · 0 评论 -
Codeforces725D-Contest Balloons(优先队列+模拟)
题目链接http://codeforces.com/contest/725/problem/D思路贪心,每次选择气球比自己多,并且飘起来需要最小气球的队伍,将气球给他 但是每个给完气球后之前比自己气球少的队伍会更新,因此用优先队列来维护每次状态代码#include <iostream> #include <cstring> #include <stack> #include <vector> #i原创 2016-10-30 16:30:57 · 293 阅读 · 0 评论 -
Leetcode141 - Linked List Cycle(链表)
题意判断一个链表是否有环思路我们可以考虑这样两个人:一个人每次走一步,一个人每次走两步,如果有环:他们总能在一圈左右后相遇,如果无环,有一个一定会走到终点。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int原创 2017-01-19 23:19:53 · 179 阅读 · 0 评论 -
Leetcode19 - Remove Nth Node From End of List(链表)
题意给定一个链表和数字n,要求删除从后往前数的第n个数。并且1 pass。思路用两个指针first和second,先让second往后跑n个,然后first和second一起往后挪动,直到second->next是NULL的时候,first->next就是我们要删除的节点。感觉是个非常巧妙的思路,思想就是:我们要删除的节点和最后一个节点的距离差是n。另外,一定要注意两个边界情况: 1. 链表为空原创 2017-01-19 23:22:38 · 159 阅读 · 0 评论 -
Leetcode234 - Palindrome Linked List(链表)
题意给定一个链表,判断它是不是回文串,要求: O(n)O(n)时间 O(1)O(1)空间 思路翻转一下链表的前半截,注意一下边界条件和奇偶性。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : v原创 2017-01-19 23:24:45 · 336 阅读 · 0 评论 -
Leetcode86 - Partition List(链表)
题意给定一个链表和数x,要求把小于x的数挪到链表前面,大于或等于x的数挪到x后面,并且保持链表的相对顺序不变。思路新开两个链表first和second,然后遍历原来的链表,小于x的挂到first上,大于等于x的挂到second上,然后把两个链表串起来就好。代码/** * Definition for singly-linked list. * struct ListNode { * i原创 2017-01-19 23:26:17 · 243 阅读 · 0 评论 -
Leetcode142 - Linked List Cycle II(链表)
题意给定一个链表,判断这个链表内是否存在环,并且求这个环的起点。思路如图所示: 我们再假设圆的周长为r,我们需要求的是a。 于是,我们设置两个指针slow和fast,slow每次走一步,fast每次走两步,并且两个都走了t时间,于是:slow:t=a+bslow: t = a + b ==>为什么不是t==a+b+mrt == a + b + mr:因为slow一旦进入环,不会跑超过一圈就会和原创 2017-01-19 23:31:28 · 212 阅读 · 0 评论