- 博客(44)
- 收藏
- 关注
原创 leetcode 344. Reverse String
题目:十分简单,就是reverse()函数调用一下。代码如下:#include#includeclass Solution {public: string reverseString(string s) { reverse(s.begin(),s.end()); return s; }};
2017-12-24 13:17:02
196
原创 leetcode 557. Reverse Words in a String III
题目:挺简单的,先用“ ”将每个单词分开,然后对每个分开的单词反转(利用reverse函数),把每个反转后的加到新的字符串上。最后别忘记每个单词间隔有个空格。代码如下:#include #includeclass Solution {public: string reverseWords(string s) { string ex="";
2017-12-21 16:06:20
195
原创 561. Array Partition I
题目:经验所得,排序好之后的和就是最大的。代码:class Solution {public: int arrayPairSum(vector& nums) { sort(nums.begin(),nums.end()); int sum=0; for(int i=0;i<nums.size();i=i+2)
2017-12-14 13:12:19
244
原创 lintcode 6. 合并排序数组
题目:比较简单,因为A,B都是已经排好序的,只要用i,j同时对A,B进行索引,然后选择较小的数放入C中就可以了。代码:class Solution {public: /* * @param A: sorted integer array A * @param B: sorted integer array B * @return: A n
2017-12-05 20:06:41
284
原创 lintcode 14. 二分查找
题目:题目比较简单,就是通过二分法找到数字。因为是给出第一次出现的下标,所以array[mid]>=target是比较好的选择。代码如下:class Solution {public: /** * @param nums: The integer array. * @param target: Target number to find.
2017-12-05 13:00:06
482
原创 leetcode---617. Merge Two Binary Trees
题目:其实只要知道树的构造方法,那么这题也就没有难度了。但是注意要判断没有T1,或者没有T2的情况。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr
2017-11-15 13:51:13
194
原创 leetcode---657. Judge Route Circle
题目如下: 也是很简单的题,只要先判断是否是偶数,然后再判断UD,LR数目是否相等就可以了。代码如下:#include int num(string s, char c) //统计字符串中含有几个c字符{ int count = 0; for (int i = 0; i < s.length(); ++i) { if (c == s
2017-11-14 17:35:14
206
原创 leetcode----461. Hamming Distance
题目如下:就是先把x,y转成二进制数,再比较有多少位不同,很简单。C++有bitset包,大大节约了二进制转换的时间。代码如下:#include class Solution {public: int hammingDistance(int x, int y) { bitset bitvec1; bitset bitvec2;
2017-11-14 14:26:28
200
原创 机器学习实战——KNN(K近邻算法)
首先,这篇博客是根据《机器学习实战》这本书写的,代码只是略有不同。书上的代码是python2.7版本的,我的python3.6有的用不了,各种问题。所以把我已经运行没问题的代码贴上来,再加上自己的一点注释。即是帮自己再次理解,也是帮助有可能因为问题运行不了的小伙伴。KNN原理:根据已经有标签已经有类别的数据,凭借新输入样本与其最近的K个样本的类别来预测新输入的样本的类别。先
2017-10-10 08:52:41
540
原创 CCF201503-2 数字排序
问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,
2017-09-14 16:20:30
502
原创 廖雪峰python教程之用map函数实现大小写转换
题目:利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']def normalize(name): return name.capitalize()def nor(name): return name[0].upper()+n
2017-05-03 15:29:26
1411
原创 从尾到头打印链表
既然反向输出链表,那就利用栈这个LIFO特性。堆栈中存节点的指针,而非节点的数据域的值。参考了剑指offer的代码,但是还是有点不明白为什么增加节点那里需要的函数参数是指向节点的指针的指针,有待以后继续思考。代码如下:#include#include#includeusing namespace std;struct ListNode{ int m_nKey; ListN
2017-03-22 22:08:39
229
原创 用两个队列实现一个栈
思路和两个栈实现队列一样。代码如下:#include#includeusing namespace std;class solution{public: void push(int x) { q1.push(x); } int pop() { if (q2.empty()) { while (!q1.empty()) { q2.push
2017-03-22 20:33:34
225
原创 用两个栈实现队列
剑指offer上的题目,因为我刚刚看过栈和队列,所以想练几个题目,再加强对栈和队列的认识。其实还算简单。就是第一个栈用来push,第二个栈用来delete。代码如下:#include#includeusing namespace std;class solution {public: void push(int x) { si1.push(x); } int pop
2017-03-22 11:29:58
194
原创 CCF201312-3 最大的矩形
之前想了很久都没有明白,看了一些博客,自己动手一步一步排之后终于知道怎么回事了。有了2种方法,其中第二种方法用了栈,但是怎么试都是20分,不知道怎么回事。解法一:各矩形高度存在height[n]数组中,从i=0开始遍历,可能的矩形长lenght=j-i+1,宽width=min(height[i]...height[j-1]),然后最大面积maxsquare=lenght*width,每次i+
2017-03-21 21:36:19
412
原创 欧几里得算法求最大公因数
#includeusing namespace std;unsigned int Gcd(unsigned int x, unsigned int y){ unsigned int temp; while (y > 0) { temp = x%y; x = y; y = temp; } return x;}int main(){ unsigned int
2017-03-16 20:16:44
457
原创 二分查找
很好用也很基本的一个算法,之前没写过,补一下。代码如下:#includeusing namespace std;int binarysearch(const int a[], int low,int high,int x){ if (low == high) return a[low]; else { for (size_t i = low; i < high; ++i)
2017-03-16 19:45:13
224
原创 线性时间的最大子数组
之前写过使用分治法来处理最大子数组问题,时间复杂度为O(logN),这次写一下用线性时间来解决最大子数组问题。只输出最大子数组的值,不输出到底哪几个元素组成最大子数组。C++代码如下:#includeusing namespace std;int Maxsubsequence(const int a[], int n){ int Thissum=0, Maxsum = 0;
2017-03-16 19:29:38
455
原创 CCF 201312-2
问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出
2017-02-17 15:06:19
257
原创 算法导论——队列
头文件queue.h如下:#pragma once#ifndef _QUEUE_H#define _QUEUE_H#define SIZE 100class my_queue{private: using pos = char; typedef size_t poa;public: void initqueue(my_queue &q); bool queueempty(
2017-02-15 21:40:26
290
原创 算法导论——栈
补了点C++primer,会写一点简单的class了,然后马不停蹄用C++实现一下栈和队列。这一篇是栈,队列在下一篇。才学class难免不好看,但是用的多了就好了。我不仅写了导论上的3个函数,还写了一些别的,不过都是差不多的,简单。头文件stack.h如下:#pragma once#ifndef _MY_STACK_H #define _MY_STACK_H#d
2017-02-14 16:09:44
296
原创 算法导论——快速排序
思路:(1).分解:数组A【p...r】被划分为两个(可能为空)子数组A【p...q-1】和A【q+1...r】,使得A【p...q-1】中的每一个元素都小于等于A【q】,而A【q】也小于等于A【q+1...r】中的每个元素。其中,计算下标q也是划分过程的一部分。(2)解决:通过递归调用快速排序,对子数组A【p...q-1】和A【q+1...r】进行排序。(3)合并:因为子数组都是原址排序
2017-02-10 11:23:37
296
原创 算法导论---堆排序
#includeusing namespace std;void heapsort(int *a, size_t size);void buildheap(int *a, size_t size);void maxheapify(int *a, size_t n,size_t i);int main(){ int a[11] = { -1,4,1,3,2,16,9,10,14,
2017-02-09 22:31:08
243
原创 算法导论—4.1-5
使用如下思想为最大字数组设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大字数组。若已知A【1....j】的最大字数组,基于以下性质将解扩展为A【1....j+1】的最大字数组:A【1....j+1】的最大字数组要么是A【1....j】的最大字数组,要么是某个子数组A【i....j+1】(1A【1....j】最大字数组的情况下,可以在线性时间内找出形
2017-02-01 10:04:55
1620
原创 C++ primer-练习6.22
编写一个函数,令其交换两个int指针。#includeusing namespace std;void swap(int **pi, int **pj);int main(){ int i = 9, j = 6; int *pi = &i, *pj = &j; swap(*pi, *pj); cout << *pi << endl; cout << *pj <<
2017-01-26 09:45:42
356
原创 C++ primer-练习6.17
编写一个函数,判断string对象中是否含有大写字母。编写另一个函数,把string对象全都改成小写形式。在这两个函数中你使用的形参类型相同么?为什么?#include#include#includeusing namespace std;bool isbig(const string &s);void changea(string &s);int main(){ s
2017-01-25 17:23:38
486
原创 算法导论——最大子数组
之前都在准备考试,寒假还是继续学习。除了家里打扫卫生,似乎也确实没什么事。多看书,多写代码,总能提高的。坚持。。。。#include typedef struct { int low; int high; int sum;}OP; OP findmaxcrossingsubarray(int * a, int low, int high){ OP pa; in
2017-01-21 14:12:51
264
原创 算法导论——2.3-2无哨兵情况下的归并排序
没有哨兵时,可以设置一个判断,只要2个分数组的一个到达底端就把另一个的后续元素赋给原数组。具体如下:#includeusing namespace std;const int sentry = 999999;void Merge(int ia[], size_t p, size_t q, size_t r){ int a1[10], a2[10]; size_t len1 =
2016-12-21 19:41:22
643
原创 算法导论——归并排序
前面写过选择排序和插入排序,下面是归并排序,如下:#includeusing namespace std;int main(){ int a[20], a1[10], a2[10]; int n, s = 0,t=0; const int sentry = 9999; cout << "input the size of array:" << endl; cin >
2016-12-19 22:02:56
311
原创 算法导论——2.1-2选择排序
题目:考虑排序存储在数组A中的n个数:首先找出A中的最小元素并将其和A[1]中的元素交换。接着,次大值和A[2]交换。以此类推。#includeusing namespace std;int main(){ int a[100]; int n, t = 0; cout << "input the size of array:" << endl; cin >> n;
2016-12-19 20:07:03
315
原创 C++ primer-练习5.17
题目:假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。为了实现这一目标,对于两个不等长的vector对象,只需挑出长度较短的那个,把它的所有元素和另一个vector对象比较即可。例如,如果两个vector对象的元素分别是0、1、1、2 和0、1、1、2、3、5、8,则程序的返回结果应该为真。下面是我写的,我现在看都觉得
2016-12-16 20:22:36
306
原创 C++ primer-练习5.14
编写一段程序,从标准输入中读取若干 string对象并查找连续重复出现的单词。所谓连续重复出现的意思是:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应的单词。如果这样的单词存在,输出重复出现的最大次数;如果不存在,输出一条信息说明任何单词没有连续出现过。例如,如果输入是:how now now now brown cow cow 那么输出应该表明单词now连
2016-12-16 18:28:24
679
原创 C++ primer-练习5.11
题目: 改统计元音字母的程序,使其也能统计空格、制表符和换行符的数量。#include#includeusing namespace std;int main(){ string str; int entercnt, tcnt, spacecnt; entercnt = tcnt = spacecnt = 0; while (getline(cin,str)
2016-12-13 14:59:48
462
原创 C++ primer-练习5.12
题目:修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff,fl,fi。#includeusing namespace std;int main(){ char ch; int ffcnt, flcnt, ficnt; ffcnt = flcnt = ficnt = 0; while (cin >> ch) { switch (ch) { c
2016-12-13 13:21:46
753
原创 C++ primer-练习5.10
题目:我们之前实现的统计元音字母的程序存在一个问题:如果元音字母以大写形式出现,不会被统计在内。编写一段程序,既统计元音字母的小写形式,也统计大写形式,也就是说,新程序遇到 'a' 和 'A' 都应该递增 aCnt 的值,以此类推。#includeusing namespace std;int main(){ char ch; int acnt, ecnt, icnt,
2016-12-13 13:05:32
344
原创 解引用和递增运算符混用来遍历vector
这样的遍历看上去简洁不啰嗦#include#includeusing namespace std;int main(){ vector ivec{ 1,3,0,8,0,-3,99 }; auto p = ivec.begin(); while (p!=ivec.end()&&*p>=0) cout << *p++ << endl; return 0;}
2016-12-03 17:01:37
316
原创 利用指针和迭代器遍历二维数组的2种方法
#includeusing namespace std;int main(){ int ia[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; for (auto p = ia; p != ia + 3; p++) { for (auto q = *p; q != *p + 4; q++) cout << *q << ' '; c
2016-12-03 13:48:49
1356
原创 C++ primer-练习3.34~3.36
3.34:假定P1和P2指向同一个数组中的元素,则下面程序的功能是什么?什么情况下非法?P1+=P2-P1;功能是让p1指向目前所指元素后第p2-p1个元素。只有当p1为常量指针是,才非法。3.35:编写程序,利用指针将数组中元素置为零。3.36:编写程序,比较两个数组是否相等,比较2个vector是否相等。#include#includeusing
2016-11-28 19:04:00
1508
原创 C++ primer-练习3.30~3.32
3.30:指出下面代码中的索引错误。constexpr size_t array_size=10;int ia[array_size];for(size_t ix=1;ix ia[ix]=ix;数组范围0~9,没有ia[10]这个元素3.31:编一个程序,定义一个含有10个int的数组,令每个元素的值就是其下标值。3.32:将上题刚
2016-11-22 15:40:00
838
原创 C++ primer-练习3.27和3.28
练习3.27:假设txt_size是一个无参数的函数,它的返回值是int。请回答下列哪个定义是非法的?unsigned buf_size=1024;(a).int ia[buf_size];(b).int ia[4*7-14];(c).int ia[txt_size()];(d).int st[11]="fundamental";(a)错,buf_size不
2016-11-22 14:31:09
699
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人