编程
ivolcano
努力努力再努力
展开
-
括号匹配,用栈处理
#include#include #includeusing namespace std;int main(){stack s;char *str="{([])}";while(!s.empty()) s.pop(); //初始化栈int len=strlen(str);for(int i=0;i<len;i++){ char c=str[i]; if(c=='('||c=='['||c=='{'原创 2016-03-25 17:24:41 · 308 阅读 · 0 评论 -
剑指Offer-11.数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。同时不需要考虑大数问题。 自以为简单的解法:double Power(double base, int exponent){ double result = 1.0; for(int i = 1; i < exponent; ++i) result *=原创 2017-03-10 14:42:34 · 414 阅读 · 0 评论 -
剑指Offer-旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 注意:二分查找的条件是数组有序,而此题的是把有序数组做了一次旋转。 int minNumberInRotateA原创 2017-03-10 10:23:07 · 263 阅读 · 0 评论 -
求任意一点是否在三角形内部
//Description: 求任意一点是否在三角形内部 #include <stdio.h>#include <math.h>struct point{ double x; double y;};double getArea(point A, point B, point C) { // 求面积 double a = sqrt((B.y-C.y)*(B.y原创 2017-03-20 21:27:34 · 613 阅读 · 0 评论 -
2017金山字符串编程题
给出n个字符串,对于每个n个排列p,按排列给出的顺序(p[0],p[1],……,p[n-1])依次连接这n个字符串都能得到一个长度为这些字符串长度之和的字符串。所以按照这个方法一共可以成 n! 个字符串。一个字符串的权值等于把这个字符串循环左移i次后得到的字符串仍和原字符串全等的数量,i的取值为[1,字符串长度]。求这些字符串最后生成的n!个字符串中权值为k的有多少个。 注:定义把一个串循环左移1原创 2017-03-14 13:26:46 · 714 阅读 · 0 评论 -
2017网易内推编程题(网格问题)
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述: 每组数组包含网格长宽W,H,用空格原创 2017-03-14 18:03:46 · 1288 阅读 · 0 评论 -
网易2017内推笔试题(合唱团)
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-50原创 2017-03-14 22:46:25 · 845 阅读 · 0 评论 -
剑指offer28-字符串的全排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、和cba。 解法:递归实现 从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列。如此递归下去,从而得到所有字符的全排列。 第一步:首先求所有可能出现在第一个位置的字符。 第二步:固定第一个字符,求后面所有字符的原创 2017-04-02 16:55:09 · 493 阅读 · 0 评论 -
剑指offer13:在O(1)时间删除链表结点
题目:在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该节点。链表的结点定义如下: struct ListNode { int val; ListNode *next; }; 要分析几种情况: 1.空链表 2.只有一个结点 3.删除的结点是尾结点void DeleteNode(ListNode *pNode,原创 2017-04-18 21:37:42 · 447 阅读 · 0 评论 -
二叉树遍历
/*已知前序和中序,得到后序**/#include <stdio.h>#include <string.h>struct Node { Node *lchild ; //左儿子指针 Node *rchild ; //右儿子指针 char c; //结点字符信息 }Tree[50]; //静态内存分配数组 int loc; //静态数组原创 2017-08-17 17:27:14 · 187 阅读 · 0 评论 -
LeetCode-连续子数组的最大和
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array[−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray[4,−1,2,1]has t原创 2017-03-10 14:41:36 · 3292 阅读 · 0 评论 -
剑指Offer-二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。 1)可能引起死循环的解法:先判断整数二进制表示中最右边一位是不是1。接着把输入的整数右移一位,此时原来处于从右边数起的第二位被移到最右边了,再判断最右边的数是不是1,用(n&1)判断。这样每一次移动一位,直到整个整数变成0为止。int NumberOf1(i原创 2017-03-10 13:26:39 · 352 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
#include <stdio.h>#define maxSize 100typedef struct{ int data[maxSize]; int top;}sqStack;//栈空状态 s->top == -1 栈满状态 s->top == maxSize -1//初始化栈void initStack(sqStack *s){ s->top = -1; //初原创 2016-12-14 20:25:24 · 297 阅读 · 0 评论 -
剑指offer-二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例子输入: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15输入整数:7输出:true分析:首先我们选取数组右上角的数字9,并且9是第4列最小的数字,9原创 2017-03-09 15:40:37 · 178 阅读 · 0 评论 -
剑指Offer-替换空格
题目:请实现一个函数,把字符串中的每一个空格替换成“%20”。例如输入“We are happy”,则输出“we%20are%20happy”。解法一:时间复杂度为O(n^2) 最直观的做法:从头到尾扫描字符串,每一次碰到空格字符的时候做替换。由于是把1个字符替换成3个字符,我们必须每替换一个空格,就把后面所有的字符都后移两个字节。假设字符串的长度是n。对每个空格字符,需要移动后面O(n)个字符,原创 2017-03-09 17:00:17 · 236 阅读 · 0 评论 -
剑指Offer-从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。 链表结点定义如下: struct ListNode { int val; struct ListNode *next; }; 直观的想法就是从头到尾输出会比较简单,于是我们很自然地想到把链表中链接结点的指针反转过来,改变链表的方向,然后可以从头到尾输出了。但是该方法会改变原来链表的结原创 2017-03-09 17:24:42 · 203 阅读 · 0 评论 -
剑指Offer-重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 二叉树节点的定义如下: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL原创 2017-03-09 19:18:19 · 263 阅读 · 0 评论 -
剑指Offer-用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,完成队列的Push和Pop操作。 队列中的元素为int类型。 分析:此题意图是要求我们操作这两个“先进后出”的栈实现一个“先进先出”的队列。 “` stack stack1; stack stack2; void push(int node) { stack1.push(node); }int原创 2017-03-09 19:44:11 · 239 阅读 · 0 评论 -
剑指offer- hash排序
题目描述:我们想对公司所有员工(几万名)的年龄排序。要求时间复杂度O(n)。 分析:要排序的年龄在一个比较小的范围,假设最大的员工年龄是99。并且还可以用辅助内存。该方法用长度100的整数数组作为辅助空间换来了O(n)的时间效率。void SortAges(int ages[], int length){ if(ages == NULL || length <=0) ret原创 2017-03-09 20:39:26 · 229 阅读 · 0 评论 -
kMP用于字符串的查找
题目描述:有一个文本串S和一个模式串P,要查找P在S中的位置该怎么做?解法一:蛮力匹配。假设现在文本串S匹配到i位置,模式串匹配到j位置,如果S[i]!=P[j],匹配失败,则i要回溯,j也要被置为0。时间复杂度是O(mn);解法二:KMP,代码如下,关键是求next[]#include #include int next[100];int KmpSearch(char* s,原创 2017-03-20 14:15:46 · 389 阅读 · 0 评论 -
剑指Offer-9.斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 int Fibonacci(int n) { // 递归 if(n < 0) return 0; else if(n == 1 || n == 2) return 1; else if(n >2 && n <= 39) { re原创 2017-03-10 11:30:27 · 328 阅读 · 0 评论 -
输出最少花费的祝福值
/*贪心算法: 按照祝福值从小到大排列 */#include <stdio.h>#include <algorithm>using namespace std;struct grand { int ai; int bi; bool operator < (const grand &A) const { //重载运算符,可用sort函数将按从小到大排列原创 2017-08-19 22:23:24 · 450 阅读 · 0 评论