- 博客(42)
- 收藏
- 关注
原创 归并排序
看很多人写得面经都被问到了手写归并排序归并排序的思路是分治和递归每次分成两个有序的数组之后,化解成合并两个有序数组的问题void merge(int a[],int first,int mid,int last,int temp[]){ int i=first; int j=mid+1; int m=mid; int n=last; int k
2016-08-22 16:19:00
286
转载 海量数据处理面试题
http://www.cnblogs.com/jerryxing/archive/2013/03/27/2984100.html
2016-07-17 15:24:57
228
原创 动态规划之LCS问题
LCS是最长公共子序列问题它不要求所得的字符在所给的字符串中是连续的。这是一道经典的动态规划题目。如果Xm=Yn,LCS(Xm,Yn)=LCS(Xm-1,Yn-1)+1;当Xm不等于Yn时,max(LCS(Xm-1,Yn),LCS(Xm,Yn-1));算法代码如下:int c[100][100];int LCS_LENGTH(const char*X,const char*Y
2016-07-07 10:16:52
410
原创 用两个栈实现队列
用两个栈实现一个队列的push和pop操作队列的特点是先进先出,栈是先进后出。因此,push操作只需要按顺序进栈,pop操作需要把一个栈中的元素转移到另一个栈。stack stack1;stack stack2;void push(int node) { stack1.push(node); } int pop() { int a;
2016-07-06 10:51:23
248
原创 重建二叉树
输入一棵二叉树的前序遍历序列和中序遍历序列,重建二叉树,返回二叉树的根结点。采用递归的思想,前序遍历的第一个节点是二叉树的根节点,在中序遍历中找到根节点左边的是左子树,右边的是右子树。struct TreeNode* reConstructBinaryTree(vector pre,vector in) { int len=pre.size(); if(len==0)
2016-07-06 10:19:09
218
原创 连续子数组的最大和
动态规划的思路f(i)={pData[i] i=0或者f(i-1)f(i-1)+pData[i] i!=0或者 f(i-1)>0}如果和小于0,则下一个元素赋值给和。如果和大于0,则继续加。 int FindGreatestSumOfSubArray(vector array) { int len=array.size(); if(len==0)
2016-06-02 23:50:58
227
原创 两个链表的第一个公共结点
先便利一遍两个链表,求出两个链表的长度,长的链表先走两个链表长度的差值步。然后两个链表一起走,到达的第一个相同节点就是第一个公共节点。ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { ListNode *p1=pHead1; ListNode *p2=pHead2; int le
2016-06-02 20:58:27
222
原创 斐波那契数列
输出斐波那契数列的第n项第一个想到的是用通项公式,这个最简单。但是第一次提交没有成功,后来看了看是丢失精度问题。 int fib1(int n) { double a=(1+sqrt(5))/2.0; double b=(1-sqrt(5))/2.0; if(n==1||n==2) return 1; else return (p
2016-05-21 12:07:55
235
原创 杭电acm 2017统计字符串中数字的个数
#include#include#includeusing namespace std;int main(){ int n; string s; cin>>n; while(n--) { int sum=0; cin>>s; for(int i=0;i<=s.size();i++) {
2016-05-18 20:04:21
367
原创 杭电2032 杨辉三角
#include#include#include#include#include#includeusing namespace std;int main(){ int n; int a[31][31]={0}; for(int i=1;i<=30;i++) { for(int j=1;j<=i;j++) {
2016-05-18 20:02:57
390
原创 编程之美的题目
最近在看编程之美,对于上面几道题简单整理下来,便于以后查看1.求二进制中1的个数 (1)根据二进制数的换算方法,一个数除以2,原来的数字减少一个0,如果结果有余数,则说明当前位置是1 (2)用二进制数与1,如果结果是1,表示最后一位是1,然后数字右移一位,循环操作 (3)V&(V-1)2.阶乘问题给定一个整数
2016-05-18 18:14:27
637
原创 杭电acm统计字符
这题要注意从键盘输入字符串的时候用cin函数,识别到空格会自动停止,因此要用getline(cin,str),str是要输入的字符串。Problem Description统计一个给定字符串中指定的字符出现的次数 Input测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空
2016-04-30 23:37:20
1337
原创 杭电acm1870愚人节的礼物
问题思路是识别到除了(和)以外的字符就停止识别,其实题目说了只有B字符,也可以识别到B字符的时候break.识别过程中(数字加一,)数目减一。Problem Description四月一日快到了,Vayko想了个愚人的好办法——送礼物。嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物。盒子里面可以再放零个或者多个盒子。假设放
2016-04-30 23:33:42
1058
原创 建立一棵二叉树
采用递归的方法建立一棵二叉树,虽然很简单的算法,真正写起来确是漏洞百出,果然还是基础不够扎实。struct TreeNode{ char key; TreeNode* left; TreeNode* right;};TreeNode* CreatTree(){ TreeNode *T = new TreeNode; char a; cout<
2016-04-29 09:35:55
4240
原创 层次遍历二叉树
采用指针的方式实现二叉树的层次遍历#include #include#include#includeusing namespace std;struct TreeNode{ int key; TreeNode* left; TreeNode* right;};void PrintNodeByLevel(TreeNode* root){ if(root
2016-04-28 14:45:10
458
原创 重建二叉树
经典的题目,已知一颗树的前序遍历和中序遍历,求这个树的后序遍历。#include #include#includeusing namespace std;struct TreeNode{ int key; TreeNode* left; TreeNode* right;};TreeNode* CreateTree(int *pre_order,int pr
2016-04-28 11:19:12
293
原创 字符串替换
这是一道字符串替换的题目,重点是要注意到对字母的大小写不敏感。c++对字符的替换有replace函数,若是要对整个祖父穿替换需要自己定义替换函数。而用java语言写就简单多了。import java.util.Scanner;public class main{ public static void main(String[] args){ Scanner s=new Sca
2016-04-27 22:52:14
282
原创 链表 倒序输出
倒序输出可以用先逆转链表在顺序输出的思路。在不改变链表的结构的前提下,用栈来实现先进后出的目的。void PrintReverse(ListNode*phead){ std::stacknodes; ListNode*pNode=phead; while(pNode!=NULL) { nodes.push(pNode);
2016-04-27 11:16:17
416
原创 构建链表 c++
构建一个链表。头插法和尾插法#include using namespace std;struct ListNode{ int m_key; ListNode* next;};void creatNodeList(ListNode *phead){ ListNode *p=phead; for(int i=1;i
2016-04-27 11:01:41
354
原创 替换字符串中的空格为%20
剑指offer上面的一道题。例如字符串是we are happy.输出 we%20are%20happy.如果按照基本的思路从前到后遍历字符串,每次识别到空格后面的字符就要往后移动两个位。因此用从后向前的方式先计算出替换后的数组的长度。设置两个指针一个指向新数组的尾部,另一个指向原来数组的尾部。直到两个指针的数值相同时表示遍历完成。代码如下。#include#includ
2016-04-22 16:30:26
1369
原创 幸运数 47
一道关于幸运数的题目,不过我思路一定是错的。还没想出来怎么做,先mark一下吧。#include#include#include#include#includeusing namespace std;int main() {vectora;vectorb1;int aa,b;cin>>aa>>b;int temp=b;if(aa{
2016-04-22 11:01:16
1231
原创 输出数组的全部组合
采用递归的思想。#include#include#includeusing namespace std;void combine(int arr[],int data[],int start,int end,int index,int r){ if(index==r) { for(int i=0;i {cout
2016-04-22 09:15:38
3273
原创 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
先遍历一遍数组,两个两个分成一组,小的放在左边大的放在右边,这样比较次数是N/2。N是数组的长度。然后最小的元素一定是在每组的左边,最大的元素在右边。下一步在左边的所有元素中比较N/2次产生最小的,在右边的元素中比较N/2次产生最大的。总共需要比较的次数是3*(N/2)次。代码如下#include #includeusing namespace std;int main()
2016-04-20 17:08:12
6993
原创 vector 用法
vector使用很方便输入方式1.直接手动输入vector v; v.push_back(0); v.push_back(1); v.push_back(3); v.push_back(0); v.push_back(12);输入方式2,键盘输入,未知数组的大小vectorv;while(cin>>a){v.push_back(a);}输
2016-04-20 16:39:05
624
原创 leetcode 283 Movezeros
实现将数组中的0元素移动到末尾我的思路是扫描一遍数组,元素为0则计数加一,不为0则按顺序复制给新数组。完整c++代码如下:#include #includeusing namespace std;void moveZeroes(vector& nums) { int count,i,j,p; count=0; j=0; int l
2016-04-20 16:02:27
287
原创 链表的倒数第k个元素(mark)
void createList1(ListNode* pHead){ ListNode* p=pHead;//指向头节点的指针 for(int i=1;i { ListNode*pNewNode=new ListNode; pNewNode->m_key=i; pNewNode->next=NULL;
2016-04-20 00:23:24
359
原创 链表操作 创建链表和打印链表
通过以下程序实现创建一个长度为10的链表,其中链表的元素是0-9.并且打印出来。//#include"stdafx.h"#include#include#include#includeusing namespace std;struct ListNode{ int m_key; ListNode* next;};void createLi
2016-04-20 00:02:40
395
原创 字符串转数字
看了剑指offer上面的第一道题,字符串转数字,就去查了下,有多种方法。比如可以直接用函数atoi();下面是我的代码。#include#include#include#include#includeusing namespace std;int main(){string a ="100";int num=0;if(a.length()!=0){
2016-04-19 21:17:29
307
原创 杭电acm2015
#include #includeusing namespace std;int main(){ int n; int m; int temp; int ave; while(cin>>n) { int sum=0; int num=0; cin>>m;
2016-04-17 00:03:56
512
原创 杭电2014
#include #include#include#includeusing namespace std;int main(){ int n; double X; while(cin>>n) { double a[100]={0}; double max1=0; double mi
2016-04-16 22:54:56
529
原创 杭电1196
#include#include#include#includeusing namespace std;int main(){ int i,x,z,result; while(cin>>x) { if(x==0) { } else{ int j=0; i
2016-04-14 16:38:44
343
原创 杭电1061
Problem DescriptionGiven a positive integer N, you should output the most right digit of N^N. InputThe input contains several test cases. The first line of the input is a single integer T
2016-04-13 20:16:08
330
原创 杭电1012
#include#include#include#includeusing namespace std;int fun(int x){ int a[11]; a[0]=1; for(int i=1;i { a[i]=i*a[i-1]; } return a[x];}int main()
2016-04-13 19:25:54
398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人