- 博客(21)
- 收藏
- 关注
原创 1050. 螺旋矩阵(25)
分析:/*1. 算出m(行)、n(列)的值。2. 由于n比较小,因此根据n算出矩阵的圈数。3. 根据圈数填充矩阵*/核心处理部分就是矩阵的填充。修改一下fillMatrix中圈数循环中各个小循环的边界,可以省略if语句,同时也成为了通用一些的螺旋矩阵填充算法(不论m、n的大小)。#include #include #include using name
2016-11-25 04:18:13
568
原创 《C++ Primer》阅读感想
无疑的,《C++ Primer》是一本相当好的书,里面的内容相当丰富。然而,或许是它太过于丰富了,作为primer,我始终认为它有所欠缺。欠缺的,不是它的内容,而是它的知识框架。我心中理想的C++指导书的样子,可以根据《C++ Primer》拆分成两本。第一本,基础篇。一、从类型、变量、表达式,到语句、函数。介绍这些语言的基本。二、从类到封装、继承、多态。介绍其基本
2016-11-13 19:34:42
1556
原创 碎碎念C++(一)冗杂问题
学习C++的这两个月,深刻觉得C++的语法实在是太复杂了,而且每一个新标准都添加了大量的东西。然而,我擅自认为,有许多东西显得冗杂了些。比如对动态内存的初始化有这么一种东西:auto p = new auto(obj);其含义是p指向一个与obj类型相同的对象,该对象用obj进行初始化。第二个auto推断obj类型,第一个auto推断指针类型。例如这个程序:#inclu
2016-11-13 15:32:40
543
原创 02-线性结构3 Reversing Linked List (25分)
#include #include #include #include #include using namespace std;struct Node{ char addr[6]; int data; char next[6];};int main(void) { string firstAddr; int n, k; cin
2016-11-11 15:49:00
447
原创 01-复杂度2 Maximum Subsequence Sum (25分)
/* * 1. 最小的i和j * 2. 若序列全为0,输出头尾元素。*/#include using namespace std;int main(void) { bool isNegative(true); //记录序列是否全为负数 int first(0), last(0); //记录第一个和最后一个输入数据。 //当前和、最大和、最小i、最小j、当前
2016-11-11 14:46:12
503
原创 11-散列2 Hashing (25分)
分析:/* * quadratic probing 平方探测。 * 增量 * 正数增量,不考虑负数增量。*/代码:#include #include using namespace std;bool isPrime(const int &n) { if(n < 2) return false; if(n > 2 && n%2 == 0)
2016-11-11 04:58:56
749
原创 11-散列3 QQ帐户的申请与登陆 (25分)
使用STL,问题就变得简单了。#include #include #include using namespace std;int main(void) { int n; cin >> n; unordered_map myMap; myMap.reserve(n); char ch, id[20], pw[20]; for(int
2016-11-11 03:58:27
789
1
原创 11-散列1 电话聊天狂人 (25分)
第一种方法,简单粗暴的用unordered_map装填数据,再导入到vector中,再排序。使用unordered_map而不是map有几点好处:1. 效率更高。2. 有reserve函数,可以预备容量,控制内存不够的空间移动,进一步提高效率。这样的运行时间是209ms#include #include #include #include #include using
2016-11-11 02:23:47
2031
原创 10-排序6 Sort with Swap(0, i) (25分)
表排序的典型题目。分析:/* 假设每个环的元素个数分别为m1, m2, ... * 其中,单一元素的环说明了该元素在正确的位置上,不考虑。多元素的环,所有元素都不在正确的位置上。 * * 1. 第一个环(包括0的环),每次swap(0, i),i是arr[0]的值,都把i置于正确的位置。 * 最后一次同时把0和最后一个要交换的元素置于正确的位置,因此swap次数是
2016-11-10 23:08:43
1760
1
原创 10-排序5 PAT Judge (25分)
排序规则:1. 总分相同,名次相同。 2. 总分相同,按照完全正确的题目数量排序。3. 1、2一致,根据id排名。4. 没有通过编译的,或者没有得分的,不列出。5. 保证至少有一个人能出现在排名表上。#include #include using namespace std;const int QUESTIONS = 6;const int MAXID = 1
2016-11-04 01:30:57
1613
1
原创 AVL Tree解析
AVL树,最难理解的一点或许是——操作描述吧。~~~2333~~~非常多的地方,让操作的描述跟人的思维习惯产生矛盾,实在很遗憾。为此,我摒弃左单旋、右单旋、左右双旋、右左双旋这些叫法,而采用顺时针旋转和逆时针旋转来说明。破坏平衡的条件有四种,其中两两成镜像。因此,只需要理解两种方式,对应成镜像的,相信也会顺其而然的理解了。1. 往左孩子的左边插入一个节点2. 往右孩
2016-11-01 13:45:13
1016
原创 04-树5 Root of AVL Tree (25分)
/*平衡二叉树(Balanced Binary Tree)(AVL Tree)平衡因子(Balance Factor):BF(T) = LHeight - RHeight|BF| <= 1调整:1. 左子树的左边插入,LL插入:向右旋转(顺时针)。-> 为何叫做左单旋?唉,真是让人难以理解。2. 右子树的右边插入,RR插入:向左旋转(逆时针)。3. 左子树的右边插入,LR插入:对左
2016-10-31 21:54:12
474
原创 08-图7 公路村村通 (30分)
邻接表 + Prim算法。#include #include #include using namespace std;struct Edge { Edge(const int &a, const int &b, const int &w): indexA(a), indexB(b), weight(w) {} int indexA; int
2016-10-31 05:41:58
1327
原创 最小生成树——Prim/Kruskal
本篇先用邻接矩阵示例。假定图中有如下数据成员以及成员函数://邻接矩阵表示法#ifndef GRAPH_H#define GRAPH_H#include "edge.h"//template class Graph {public: using T = char; ... void PrimMST(const int &index);
2016-10-31 02:49:35
357
原创 详解数据结构——图之邻接矩阵表示法
一、图的建立图是表达“多对多”的关系的一种数据结构。它由非空的有限顶点集合和有限边集合组成。1. 顶点集合常常由数组表示。数组下标表示顶点位置。数组内容包含顶点数据,并且要添加判定是否被访问过的标志标量,为其余操作提供参数。其数据类型定义如下:struct Vertex { T data; bool isVisited;}2. 边
2016-10-29 22:54:38
3853
原创 1076. Forwards on Weibo (30)
GitHub加载慢得让人想哭。虽然博客广告多,也只能先发在这里了,什么时候觉得太闲了,那时再去搞个个人网站。用邻接表表存储图的边。这道题,我第一次提交的时候最后一个测试用例的运行时间是1200+ms!左思右想,左改右改,始终不知其然。后来参考了别的小伙伴的代码,把使用作为链表的forward_list改成vector,立马提速到100+ms。至今还不知道为何使用链表
2016-10-29 11:48:15
312
原创 09-排序3 Insertion or Heap Sort (25分)
这道题跟上一道很相似,不同的地方在于Heap Sort的处理。1. 找到下一个要和根节点交换(堆排序)的元素的下标。2. 利用“下滤”,做一次堆排序。#include #include using namespace std;bool isHeapSort(int *init, int *arr, int n);int getNextHeapSortIndex(int
2016-10-29 01:55:09
1000
原创 09-排序2 Insert or Merge (25分)
在头文件 algorithm 中,还有像merge这样的函数。算法的选择是多种多样的,选择自己熟悉的。#include #include using namespace std;bool isMergeSort(int *init, int *arr, int n);int getMergeLength(int *arr, int n);void mergeSortOnce
2016-10-29 01:20:16
1498
原创 十进制点分IP转换为32位二进制IP
先来看看简单的情况:#include <iostream>using namespace std;int main() { int *p = new int[3]; //assignment for(int i = 0; i < 3; i++) { *(p + i) = i + 1; } //print in first way. fo
2016-09-22 06:23:46
4256
原创 C++中的struct
网上很多视频中的知识点都比较旧,很多东西也是自己后来多了解了点才恍然大悟。虽然各种编程语言一直有在更新标准,例如C++的标准从98到11再到14。虽然C++11已经被大部分编译器支持了,遗憾的是很多视频的授课内容依旧停留在98标准,甚至不少直接就用了“C语言式”的方法来传授C++的知识,实在有点囧。————————————————————cut-off line——————————
2016-09-20 19:47:45
7846
原创 Java从控制台读取数据,输入流System.in的几种方法效率比较
这是一道PTA上关于复杂度算法的题目——最大子列和问题,程序简单。我分别用1)构造Scanner对象:Scanner in = new Scanner(System.in);2)构造BufferedReader对象:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));3)直接使用Syste
2016-09-08 03:10:09
9680
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人