
C-C++
熊小楚
这个作者很懒,什么都没留下…
展开
-
字符的最长无重复子串长度Longest Substring Without Repeating Characters
给定一个字符串,请找出其中字符的最长无重复子串。例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。解法一:用一个map<char,int>表示字符串中每个字符是否出现,初始化为0,表示未出现。用两个指针分别指向字符串的第一个和第二个元素,用第二个指针从左往右扫描字符串。每扫描一个字符,根据数组中对原创 2017-01-13 16:00:54 · 658 阅读 · 0 评论 -
最长回文子串-动态规划O(N^2)
分析:定义二维数组dp[i,j]用以表示Si…Sj是回文(true)或不是回文(false)定义dp数组全为false;第一次循环设置单个字符为回文子串 dp[i][i]=true;第二次循环判断相邻两个字符dp[i][i+1]是否为回文,若是则将回文子串的起始位置设为i,长度设为2;第三次循环判断长度len为3到s.length()长度的子串是否为回文,j=i+len-1,dp[i][j]原创 2017-02-13 17:39:31 · 540 阅读 · 0 评论 -
数字全排列生成算法
#include <iostream>#include <cmath>using namespace std;void PrintMatrix(int num[], int k, int m){ int i; if(k == m) { for(i=0; i<m; i++) cout<<num[i]; cout<<en原创 2017-02-23 16:41:10 · 670 阅读 · 0 评论 -
计算x在num中出现的次数
转载自:http://www.cnblogs.com/cyjb/p/digitOccurrenceInRegion.html#include <iostream>using namespace std;//计算x在num中出现的次数int countNumbers(int num, int x){ int times = 0, k, temp; for(int i=1; k=num转载 2017-03-08 17:21:23 · 419 阅读 · 0 评论 -
和为S的两个数字 VS 和为S的连续正整数
和为S的连续正整数定义first指针指向第一个数字1,last指针指向第二个数字2;定义curSum为first-last之间数字的和;比较S与curSum的大小,若相等则打印first-last;若curSum大,则first后移;若curSum小,则last前移。#include <iostream>using namespace std;void Print(int first, in原创 2017-03-09 15:09:13 · 233 阅读 · 0 评论 -
前N位数字能被N整除
题目:1~9的9个数字,每个数字只能出现一次,要求这样一个9位的整数:其第一位 能被1整除,前两位能被2整除,前三位能被3整除……依次类推,前9位能被9整除。枚举法:#include <iostream>#include <vector>using namespace std;bool used[10];vector<long long int> v;void dfs(int k, long原创 2017-03-10 15:47:52 · 1219 阅读 · 0 评论 -
中序遍历和先序遍历构建二叉树
中序遍历和先序遍历/后序遍历构建二叉树原创 2017-01-16 18:17:11 · 375 阅读 · 0 评论 -
判断一个二叉树是不是另一个二叉树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。约定空树不是任意一个树的子结构class Solution { bool isSubtree(TreeNode* pRootA, TreeNode* pRootB) { if (pRootB == NULL) return true; if (pRootA == NULL) return false;原创 2017-03-15 21:17:31 · 644 阅读 · 0 评论 -
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
class Solution {public: vector<int> printMatrix(vector<vector<int> > &matrix) { int row = matrix.size(); int col = matrix[0].size(); int start= 0; vector<int> resul原创 2017-03-17 11:35:02 · 503 阅读 · 0 评论 -
Median of Two Sorted Arrays O(log (m+n))
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 分析:找两个已排序数组的中位数,其实就是将两个有序数组有序合并后找第K小的原创 2017-02-13 16:10:57 · 347 阅读 · 0 评论 -
顺时针打印矩阵
通常当我们遇到一个复杂的问题的时候,我们可以用图形帮助我们思考。由于我们是以从外圈到内圈的顺序依次打印,我们在矩阵中标注一圈作为我们分析的目标。在下图中,我们设矩阵的宽度为columns,而其高度为rows。我们我们选取左上角坐标为(startX, startY)。我们可以想象有一个循环,在每一次循环里我们从(startX, startY)出发按照顺时针打印数字。接着我们分析这个循环结束的条件。对一原创 2017-02-21 17:18:04 · 494 阅读 · 0 评论 -
实现一个单链表的倒置
C++函数功能:实现单链表的倒置 函数输入:单链表头节点 函数返回:返回头节点指针 //单链表的倒置struct node *rev(struct node *head){ struct node *p1, *p2, *p3; int temp; if(head == NULL || head->next == NULL) //若head为空或只有一个节点原创 2017-01-11 10:54:58 · 2124 阅读 · 0 评论 -
实现一个单链表的建立、测长、打印、删除、插入
C++实现单链表的创建(尾插法)、节点计数、遍历打印#include <iostream>using namespace std;struct node{ int data; struct node *next;};int n = 0; //节点个数//单链表的创建,尾插法struct node *create(struct node *head){ //p为待插原创 2017-01-10 16:43:45 · 478 阅读 · 0 评论 -
双链表的建立、测长、打印、删除、插入
C++实现 主要结构与上一篇的单链表相同#include <iostream>using namespace std;struct node{ int data; struct node *pre; //前驱指针 struct node *next; //后继指针};int n = 0; //节点个数//链表的创建,尾插法struct node原创 2017-01-11 11:50:53 · 308 阅读 · 0 评论 -
循环链表应用——约瑟夫环问题
问题:已知n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从K开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列#include <iostream>using namespace std;struct node{ int data; struct node *next;};//约瑟夫原创 2017-01-11 15:03:07 · 1096 阅读 · 1 评论 -
队列的创建、入队、出队、打印、统计队列长度
队列是一种特殊的线性表,在这种线性表中,删除运算限定在表的一段进行,而插入运算限定在表的另一端进行,通常,约定把允许插入的一端称为队尾,把允许删除的一端称为队首。队列进出的原则是先进队的先出队,即先进先出原则。队列在计算机程序设计中经常被用到,如Windows操作系统的消息队列。队列可以采用链式或顺序存储结构来描述,本文采用链式结构来进行表达。由于队列需要在队首以及队尾进行删除和插入操作,所以需要设原创 2017-01-11 16:10:55 · 4149 阅读 · 0 评论 -
栈的创建、入栈、出栈、统计长度
C++实现,采用链表存储,因为顺序存储较为简单,不再重复叙述。#include <iostream>using namespace std;struct node //栈的节点{ int data; struct node *next;};struct linkStack{ struct node *top; //指向栈顶节点 int原创 2017-01-11 20:06:16 · 5022 阅读 · 1 评论 -
形参和实参的区别
形参和实参的区别实参(argument): 全称为”实际参数”是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 形参(parameter): 全称为”形式参数” 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函转载 2017-02-16 14:31:04 · 6013 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copy print?int a = 100; int b = a; int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-sharp] view plain转载 2017-02-20 09:36:22 · 263 阅读 · 0 评论 -
判断第二个序列是否为第一个序列的弹出顺序
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution {public: bool IsPopOrder(vector<转载 2017-03-17 14:25:08 · 456 阅读 · 0 评论