
排序
会飞的蟋蟀
学习中!!
展开
-
USACO 2.1.2 顺序的分数 Ordered Fractions
题解这道题其实很容易,枚举全部分数并且排序即可。 但是我用优先队列来做了,发现stl的priority_queue超时,然后自己手撸了个heap, 结果把下调写错了,debug了半天,尴尬-。- |||代码/*PROG:frac1ID:imking022LANG:C++ */#include <iostream>#include <cstdio...原创 2018-07-25 16:19:35 · 460 阅读 · 0 评论 -
LeetCode 825. Friends Of Appropriate Ages
题解看似简单,其实也简单,就是出题人故意挖了坑等你跳。第一坑,冗余条件3,和2一个意思。第二坑,排序无能,爆时间。躲了这俩坑就基本明白了,就是桶排序。ps: 我的代码还可以优化,可以再缩减遍历的空间。Codeint cot[121];int numFriendRequests(vector<int>& ages) { int n = ages....原创 2018-10-24 11:20:46 · 181 阅读 · 0 评论 -
LeetCode 179. Largest Number
题解这题见过,本质是排序,只要写个cmp函数就可以了。Codeclass Solution {public: string i2s(int a){ if(a==0) return "0"; string res=""; int tmp; while(a){ tmp=a...原创 2018-10-10 11:32:08 · 88 阅读 · 0 评论 -
LeetCode 78. Subsets && 90. Subsets II
题解也是两题一起写。第二问的差别在于是否有重复数字。这种求组合的,思路大体有三种:dfs,迭代,位操作。dfs不说了很熟悉,我用位操作搞定了第一问,这里关注一下迭代。我叙述一下迭代的过程,例如对{1,2,3},先预设返回值res为{{}}。遍历原数组,对每个数字,依次取得现有返回值res内所有组,加上此数字,再加回res。第一次:{{},{1}}第二次:{{},{1},{2},...原创 2018-10-09 11:36:40 · 171 阅读 · 0 评论 -
LeetCode 406. Queue Reconstruction by Height
题解这题可以巧妙地被结构为一道插排问题。先sort,h从大到小排,h相同按k数从小到大。此时数列前方的大的数已经成为一个局部完整序列了。因为小h不会影响大h的k正确性,然后慢慢考虑后面的h要插入哪里就可以了。这不就是插入排序么。Codeclass Solution {public: static bool cmp(pair<int, int> &a, ...原创 2018-10-08 10:13:34 · 150 阅读 · 0 评论 -
LeetCode 215. Kth Largest Element in an Array
题解比较经典的题了,当然经典也意味着解决方案很成熟了。快排变体,堆排,插入选择都可以做。Codeclass Solution {public: int findKthLargest(vector<int>& nums, int k) { /* heap sort priority_queue<int&g...原创 2018-10-05 09:57:22 · 193 阅读 · 0 评论 -
LeetCode 148. Sort List
题解链表的归并排序,注意怎么二分,比较简单。Codeclass Solution { public ListNode sortList(ListNode head) { if(head==null || head.next == null) return head; ListNode pre=null,slow,fast; ...原创 2018-10-04 14:10:40 · 628 阅读 · 0 评论 -
LeetCode 56. Merge Intervalse
题解检验区间交叠,思路比较直观,先排序再比较,看代码。前面我的,后面的最精炼。O(n^2)class Solution {public: static bool cmp(Interval &a,Interval &b){ return a.start < b.start; } bool used[50000]; ve...原创 2018-09-26 13:13:17 · 117 阅读 · 0 评论 -
luogu P1233 木棍加工
题解这道题很像之前做过的导弹拦截的题目,关键点是偏序集。 显然答案就是这个二维数集合的最少链划分数,也就是最大的反链长度 (根据Dilworth定理)。 但是直接求反链还是难。 咱们先对其中一维由小到大排序,再对另外一维被固定的数,考察其非降序情况即可。 我看了一些贪心的做法也是可行的。ps: 再次出现 bus error。 在sort()中必须要用严格升序,参见std::sort...原创 2018-08-27 20:21:25 · 250 阅读 · 0 评论 -
USACO 2.2.4 派对灯 Party Lamps
题解这题还是比较有意思的,难在理解题意。 naive的遍历所有情况 O(4^N) 是绝对不行滴。 仔细想想,按一个按键 偶数次等于不按,按奇数次相当于按一次。所以某按钮按几次可以统统转化为按了0或1次。 再想想,按的次序有没有影响。答案是没有,模拟一下可知。 那么其实,所谓的 4^N 种 变化其实 就只有 0000~1111 这 16种而已。那么我们把这16种情况全部求出再作比较即可。...原创 2018-08-13 12:23:56 · 313 阅读 · 0 评论 -
P1118 [USACO06FEB]数字三角形 Backward Digit Su
题解可以递推出初始的系数组,然后遍历所有的排列并计算就可以了。 用stl会超时,需要优化。我们在计算累乘的过程中 若发现此位置算上后 cur_sum已经大于目标sum时 那么在对后面的数做permutation就无用了 全部都会大于sum,所以可以直接跳过。 跳的方式是 把第i位到末尾的数全部从大到小排序,那么下次permutaion就会改变当前i位。 这是根据permutaion的计...原创 2018-08-08 13:34:41 · 154 阅读 · 0 评论 -
LeetCode 675. Cut Off Trees for Golf Event
题解排序+BFS最短路。思路比较直接吧,按树高顺序依次求之间的最短路径。注意这次BFS的写法不太一样,不用开等大小矩阵存最短长度。Codeint dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};int cutOffTree(vector<vector<int>>& forest) { if(forest.e...原创 2018-10-27 10:21:46 · 173 阅读 · 0 评论