互联网笔试面试基础算法
HuY89
这个作者很懒,什么都没留下…
展开
-
java 中缀转后缀(逆波兰)
整体思路是这样的:遇到数字的话直接输出,遇到右括号 输出左括号上面的所有元素 ,遇到左括号入栈,遇到乘除符号,进行判断如果栈中有左括号或栈顶元素是加减就入栈其余出栈,遇到加减符号,如果栈中有左括号则入栈,否则将栈中元素全部出栈。做完这些处理后,在将栈中还没出栈的加入到输出结果中。import java.util.Stack;public class LeetCode_middleTran原创 2015-12-11 20:13:52 · 338 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。class Solution {public: string PrintMinNumber(vector numbers) { if(numbers.size()==0) return "原创 2015-12-10 21:48:54 · 188 阅读 · 0 评论 -
连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?class Solu原创 2015-12-10 21:47:22 · 177 阅读 · 0 评论 -
字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。按字典序打印出该字符串中字符的所有排列。class Solution {public: vector原创 2015-12-10 21:45:01 · 263 阅读 · 0 评论 -
二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思想:在搜索二叉树中,左子结点的值总是小于父结点的值,右子结点的值总是大于父结点的值。因此我们在转换成排序双向联表时,原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子结点的指针调整为链表中指向后一个结点的指针。/*struct TreeNode {原创 2015-12-10 21:44:20 · 239 阅读 · 0 评论 -
复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { }原创 2015-12-10 21:43:07 · 135 阅读 · 0 评论 -
二叉树中和为某一值的路径
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(原创 2015-12-10 21:42:18 · 177 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector &array) { int len=array.size(); if(len==0||len==原创 2015-12-10 21:32:03 · 170 阅读 · 0 评论 -
斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。class Solution {public: int Fibonacci(int n) { int result[2]={0,1}; if(n<2) return result[n]; int fibNMinusOne=0;原创 2015-12-10 21:29:11 · 193 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()){ while(!stack1.empty()){原创 2015-12-10 21:27:38 · 184 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int [][] array,int target) { boolean found=false; i原创 2015-12-10 21:23:24 · 220 阅读 · 0 评论 -
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。class Solution {public: int Add(int num1, int num2) { int addSum,addCarry; do{ addSum=num1^num2;//完成第一步没有进位的加法运算 add原创 2015-12-10 22:01:21 · 1023 阅读 · 0 评论 -
扑克牌问题
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。原创 2015-12-10 21:59:12 · 716 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。class Solution {public: bool VerifySquenceOfBST(vector sequence) { int len=sequence.size(); if(len==0)原创 2015-12-10 21:41:16 · 164 阅读 · 0 评论 -
丑数
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数class Solution {public: int Min(int n1,int n2,int n3){ int min = (n1 < n2) ? n1 : n2; min原创 2015-12-10 21:50:01 · 194 阅读 · 0 评论 -
二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。方法一:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode原创 2015-12-10 21:53:51 · 1266 阅读 · 0 评论 -
数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。class Solution {public: void FindNumsAppearOnce(vector data,int* num1,int *num2) { if(data.size()<2){ *num1=0; *num2=0;原创 2015-12-10 21:55:20 · 197 阅读 · 0 评论 -
删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {原创 2015-12-11 20:06:15 · 294 阅读 · 0 评论 -
给定一个文件每一行是字符串,找出所有的逆序对,比如abc和cba是逆序的对。
给定一个文件每一行是字符串,找出所有的逆序对,比如abc和cba是逆序的对。Public void main(String[] args)File f=new File("c:/input.txt");String [MAX] strs=new String[MAX];int count=0;while (1){ String s= f.readline(); if (原创 2015-12-11 20:12:56 · 1002 阅读 · 0 评论 -
字符串左移
字符串左移:void *pszStringRotate(char *pszString, intnCharsRotate)比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)。#include using namespace std; void ReverseString( char* pBegin, char* pEnd ){原创 2015-12-11 20:12:06 · 419 阅读 · 0 评论 -
给定一个字符串,求出其最长的重复子串。
给定一个字符串,求出其最长的重复子串。string FindStr(conststring &str){ string temp, MaxStr; intMaxLen = 0; for(inti = 0; i < str.length(); ++i) { for(intj = str.length() - 1; j>i; --j)原创 2015-12-11 20:10:42 · 1045 阅读 · 0 评论 -
重建二叉树
重建二叉树import java.util.Scanner;public class Main { public static boolean flag; public static void main(String[] args) { Main build=new Main(); Scanner scanner=new Scanner(Syste原创 2015-12-11 20:09:56 · 265 阅读 · 0 评论 -
求数列的和
Problem Description 数 列 的 定 义 如 下 : 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。 Input 输入数据有多组,每组占一行,由两个整数n(nOutput 对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。#include#include#includeusing n原创 2015-12-11 20:08:56 · 391 阅读 · 0 评论 -
对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL),原创 2015-12-11 20:08:12 · 275 阅读 · 0 评论 -
二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。#include "tools.h"using namespace std;/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNod原创 2015-12-11 20:07:27 · 280 阅读 · 0 评论 -
求一个字符串中连续出现次数最多的子串
求一个字符串中连续出现次数最多的子串。#include #include #includeusing namespace std;pair fun(const string &str){ vector substrs; int maxcount=1,count=1; string substr; int i,len=str.length原创 2015-12-11 20:04:38 · 460 阅读 · 0 评论 -
链表中环的入口结点
一个链表中包含环,请找出该链表的环的入口结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode *MeetingNode(原创 2015-12-11 20:03:54 · 232 阅读 · 0 评论 -
表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。class Solution {public: void scanDigital(char **str){ whi原创 2015-12-10 22:04:38 · 262 阅读 · 0 评论 -
把字符串转换成整数
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。如果是非法的整数字符,比如1aa3,则返回0。class Solution {public: int StrToInt(string str) { if(str.length()==0) return 0; bool flag=true; int k=0;原创 2015-12-10 22:01:56 · 283 阅读 · 0 评论 -
翻转单词顺序列
最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?class Solution {原创 2015-12-10 21:57:51 · 287 阅读 · 0 评论 -
合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(List原创 2015-12-10 21:36:04 · 197 阅读 · 0 评论 -
二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。class Solution {public: int NumberOf1(int n) { int count=0; while(n){ ++count; n=(n-1)&n; } return count;原创 2015-12-10 21:30:23 · 136 阅读 · 0 评论 -
树的子结构
输入两颗二叉树A,B,判断B是不是A的子结构。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: bool H原创 2015-12-10 21:36:57 · 178 阅读 · 0 评论 -
从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。返回新链表的头结点。class Solution {public: vector printListFromTailToHead(ListNode* head) { vector ret; while (head) { ret.push_back(head->val);原创 2015-12-10 21:25:20 · 210 阅读 · 0 评论 -
字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。class Solution{public: Solution():index(0)原创 2015-12-10 22:05:15 · 332 阅读 · 0 评论 -
数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。class Solution {public: int GetNumberOfK(vector data ,int k) { int number=0; int start=0; int end=data.size()-1; if(data.size()!=0){原创 2015-12-10 21:52:45 · 192 阅读 · 0 评论 -
栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。class Solution {public: bool IsPopOrder(vector pushV,vector popV原创 2015-12-10 21:39:51 · 169 阅读 · 0 评论 -
二叉树的镜像
输入一个二叉树,输出其镜像。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: void Mirror(T原创 2015-12-10 21:37:43 · 164 阅读 · 0 评论 -
反转链表
输入一个链表,反转链表后,输出反转链表后头节点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) {原创 2015-12-10 21:35:13 · 210 阅读 · 0 评论 -
链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead,原创 2015-12-10 21:34:22 · 229 阅读 · 0 评论