面试编程题
ningbo2016
这个作者很懒,什么都没留下…
展开
-
排序算法的一点点小结
一转眼2月过去了,秋招快结束了,趁现在这段时间对之前面试中问到的排序算法做一个小结,怕背熟练的又忘记了。。。#include<Windows.h>#include<iostream>#include<vector>#include<stdio.h>#include<stack>using namespace std;void...原创 2018-10-28 17:38:23 · 127 阅读 · 0 评论 -
求1+2+3+...+n
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路:第一感觉是等差数列求和套用公式就行,代码如下class Solution {public: int Sum_Solution(int n) { return (n+1)*n/2; }};仔细看了一下题目...原创 2018-11-11 18:48:00 · 1017 阅读 · 0 评论 -
左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路:调用string的substr函数,一行代码就够,注意字符串为空的情况,好像测试样例中,没有...原创 2018-11-14 10:02:03 · 69 阅读 · 0 评论 -
和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。思路 : a+b=c;st a*b尽可能的小,根据常识,a,b之间的差越大,乘积越小,(换个角度想,给你周长一定,怎么样的四边形的面积最大,肯定是正方形),根据这个想法(前提是递增排序的数组),从头尾开始...原创 2018-11-14 11:05:39 · 111 阅读 · 0 评论 -
孩子们的游戏(圆圈中最后剩下的数)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一...原创 2018-11-12 19:22:25 · 96 阅读 · 0 评论 -
二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:这题用递归来写代码非常简单,递归对左右子树求最大值就行了,非递归的也简单,之前写过类似的一层一层的输出,层次遍历获取深度值。递归版本:class Solution {public: int TreeDepth(TreeNode* pRoot) ...原创 2018-11-17 11:29:38 · 120 阅读 · 0 评论 -
平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:平衡二叉树是指左右子树的深度值不能超过1,递归,对每个结点遍历获取深度,进行比较,这里有2种 想法,一种从上到下进行比较,另一种是从下往上进行比较,从上到下进行比较,会出现结点多次遍历的情况。代码(从上到下):class Solution {public: int depth(TreeNode* root) {...原创 2018-11-17 11:52:54 · 127 阅读 · 0 评论 -
数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。思路:直接遍历class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int count = 0; for(int i = 0;i<data.size();) { if(...原创 2018-11-17 15:25:02 · 90 阅读 · 0 评论 -
用插排对单向链表进行排序
插排时间复杂度O(N^2),空间复杂度O(1),对数组用插排进行排序,对每个元素,向前插入到合适的位置,数组可以用下标访问,向前访问,但单向链表只能一个方向移动,因此构造辅助链表,代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *...原创 2018-11-26 16:24:49 · 245 阅读 · 0 评论 -
palindrome-partitioning-ii
题目描述Given a string s, partition s such that every substring of the partition is a palindrome.Return the minimum cuts needed for a palindrome partitioning of s.For example, given s =“aab”,Return1si...原创 2018-11-29 17:58:48 · 171 阅读 · 0 评论 -
leetcoode-single-number&&single-number-ii
single-numberGiven an array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it without...原创 2018-12-01 16:05:44 · 94 阅读 · 0 评论 -
binary-tree-postorder-traversal
Given a binary tree, return the postorder traversal of its nodes’ values.For example:Given binary tree{1,#,2,3},12/3return[3,2,1].Note: Recursive solution is trivial, could you do it iterativ...原创 2018-11-28 19:10:04 · 102 阅读 · 0 评论 -
leetcode-populating-next-right-pointers-in-each-node
题目描述Given a binary treestruct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next;}Populate each next pointer to point to its next right node. If there is no next rig...原创 2018-12-06 06:27:43 · 94 阅读 · 0 评论 -
add-binary
题目描述Given two binary strings, return their sum (also a binary string).For example,a =“11”b =“1”Return"100".字符串模拟二进制数相加,思路:倒着相加,考虑到2个字符串长度不一,可以在短的前面补0,当然可以不补,考虑相加后的字符串长度为最长字符串的长度(有进位的要再加一),思路很简单,...原创 2018-12-17 13:14:16 · 114 阅读 · 0 评论 -
gray-code
The gray code is a binary numeral system where two successive values differ in only one bit.Given a non-negative integer n representing the total number of bits in the code, print the sequence of gra...原创 2018-12-30 10:07:27 · 112 阅读 · 0 评论 -
翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:以单词为单位进行翻...原创 2018-11-13 14:34:16 · 167 阅读 · 0 评论 -
扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张...原创 2018-11-13 10:06:46 · 1499 阅读 · 0 评论 -
不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:脑子里想了一下,这是要考位操作,&,异或操作,但不知道怎么搞,其实除了四测运算,还有++,–;代码如下:class Solution {public: int Add(int num1, int num2) { if(num1>0){ ...原创 2018-11-10 18:43:11 · 86 阅读 · 0 评论 -
剑指Offer之滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2018-10-29 19:43:15 · 74 阅读 · 0 评论 -
二叉树层次遍历
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路 二叉树的层次遍历,利用栈的先进后出的特性。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(N...原创 2018-10-31 21:36:23 · 148 阅读 · 1 评论 -
剑指offer之回溯法
机器人的运动路径int getnum(int x){ int sum = 0; while (x) { sum += x % 10; x /= 10; } return sum;}void dfs(int threshold, int i, int j, int rows, int cols, int &sum, vector<int> &fl...原创 2018-10-30 15:56:47 · 147 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2018-11-01 10:01:45 · 73 阅读 · 0 评论 -
堆排序
**我个人的理解的,先根据排序要求整成大顶堆或小顶堆(一般升序采用大顶堆,降序采用小顶堆),大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]从最后一个非叶子结点开始(叶结点自然不用调整,第一个非叶子结点...原创 2018-10-30 21:14:23 · 67 阅读 · 0 评论 -
对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:最近一直在用队列,不假思索直接上/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2018-11-01 14:32:16 · 87 阅读 · 0 评论 -
删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:没啥想法,就照字面意思来// 删除链表中重复的结点.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include&...原创 2018-11-06 16:05:58 · 87 阅读 · 0 评论 -
链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路:之前写过判断链表是否有环,弄个快慢指针,如果会相遇,则认为有环,这里如果有环要找出环的入口,要推一下根据这个思路写代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2018-11-06 18:21:34 · 98 阅读 · 0 评论 -
字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。思路:想着用什么容器,还是直接用string ,读入字符时,如果为空,直接加入,如果不为空,判断当前字符流里有没...原创 2018-11-06 19:56:44 · 94 阅读 · 0 评论 -
数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:构建一个辅助数组记录出现数字的次数,遍历一遍,如果次数超过2次直接break,时间复杂度O(n),空间复杂度O(n...原创 2018-11-09 21:36:12 · 726 阅读 · 0 评论 -
二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。个人思路:记录中序遍历结果,从中寻找。代码如下:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; ...原创 2018-11-02 10:57:29 · 87 阅读 · 0 评论 -
表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。思路:硬怼,枚举反例不存在E或e,存在+或-且不在第一位,返回false,如1+23存在E或e在最后一位,返回false,如12原创 2018-11-07 11:17:03 · 64 阅读 · 0 评论 -
正则表达式匹配
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"aba"均不匹配思路:没有硬怼逻辑,看来一原创 2018-11-07 12:35:48 · 166 阅读 · 1 评论 -
链表的快排
写链表的快排,卡壳了。。。重新梳理下:// 1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream> #include <stdlib.h>using namespace std;struct ListNode{ int val; ListNode * next; ListNode...原创 2019-03-13 16:34:21 · 559 阅读 · 0 评论