剑指offer
FBI-PC
这个作者很懒,什么都没留下…
展开
-
找出数组中次数超过n/k的数
题目:有一个整形数组,长度为n,有一个比较小的数k,求得是:数组中出现次数多余n/k的数字n = 100,k=2, n/k =50n = 10000, k = 10, n/k = 1000要求空间复杂度为O(k)时间复杂度为O(n*k)思路: 每次删除k个不同的数,最后剩下的数不同的数小于k等于k个就可能是答案,只需要在遍历一次即可。原理:大于n/k次的数字必定只存在小于等于k个。代...原创 2019-07-17 14:16:59 · 849 阅读 · 0 评论 -
Leetcode Weekly Contest 130 题解
第一题:Binary Prefix Divisible By 5Binary Prefix Divisible By 5Given an array A of 0s and 1s, consider N_i: the i-th subarray from A[0] to A[i] interpreted as a binary number (from most-significant-...原创 2019-04-01 17:10:15 · 171 阅读 · 0 评论 -
Leetcode cWeekly Contest 129
Leetcode 1020. Partition Array Into Three Parts With Equal Sum题目:Given an array A of integers, return true if and only if we can partition the array into three non-empty parts with equal sums.Forma...原创 2019-03-24 12:48:28 · 154 阅读 · 0 评论 -
Leetcode 207. Course Schedule
There are a total of n courses you have to take, labeled from 0 to n-1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:...原创 2019-03-23 15:54:19 · 135 阅读 · 0 评论 -
Leetcode 200. Number of Island
Given a 2d grid map of '1’s (land) and '0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume...原创 2019-03-21 21:47:22 · 168 阅读 · 0 评论 -
Leetcode Weekly Contest 128
做出来三个第一题:Leetcode 1012. Complement of Base 10 Integer题目:Every non-negative integer N has a binary representation. For example, 5 can be represented as “101” in binary, 11 as “1011” in binary, and...原创 2019-03-17 19:10:56 · 107 阅读 · 0 评论 -
2019/3/16 字节跳动笔试题
有n个人参加编程比赛,比赛结束后每个人都得到一个分数;现在所有人排成一圈(第一个和第n个相邻)领取奖品,要求;1:如果某个人的分数比左右的人高,那么奖品数量也要比左右的人多;2:每个人至少得到有个奖品。问最少应该准备多少奖品。输入描述:第一行是整数n,表示测试样例个数每个测试样例的第一行是一个正整数n,表示参加比赛的人数;(0<n<100000)第二行是n个正整数a[i]...原创 2019-03-17 02:35:26 · 1931 阅读 · 3 评论 -
2019/3/16网易笔试题 约瑟夫环 翻牌 充电桩充电
第一题:n个人围成一圈,第一个人从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。最后剩下的人为胜者。指定n和m,求胜利者编号。输入描述:第一行输入n和m,空格隔开,如10,2其实就是约瑟夫环代码:#include<iostream>#include<cstdio>#include<algorithm>#include<ass...原创 2019-03-17 02:08:16 · 685 阅读 · 0 评论 -
腾讯内推笔试题之_硬币,奇妙的数列,猜拳游戏
第一题:硬币题目:思路:贪心即可,优先使用大面值代码:#include<iostream>#include<cstdio>using namespace std;int main(){ int n,m; while(~scanf("%d %d",&n,&m)) { if(n>=m) return 1; int ans =...原创 2019-03-10 15:14:08 · 423 阅读 · 0 评论 -
腾讯内推笔试题之_气球颜色
题目:解析:其实维护一个m个大小的数组即可,然后每次进入的时候判断一下是否为一种新的颜色,如果是则总的颜色总数color_sum++,当达到m的时候去的最小坐标和最大坐标,随机更新答案,如果不是新的颜色,就用当前颜色的下标去覆盖即可,有种贪心的思想在里面,时间复杂度O(n*m)代码:#include<cstdio>#include<map>#include<...原创 2019-03-10 14:48:25 · 666 阅读 · 0 评论 -
11月29日 剑指offer 平衡二叉树 && Leetcode
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解析:首先得明白平衡二叉树的定义,就是左右子树高度差的绝对值不超过1。所以用递归可以解决,对二叉树进行左右遍历,然后得到左右子树的高度,判断绝对值的值是否大于1,然后一个节点的高度取决于return max(left_depth, right_depth);代码:int tryTree(TreeNode* curNode, int ...原创 2018-12-02 21:24:31 · 773 阅读 · 0 评论 -
11月28日 剑指offer 二叉树的深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解析:二叉树的遍历 想法是递归分第三种情况1)当遇到空节点的时候 则更新max_depth的值2)递归遍历左节点3)递归遍历右节点注意事项 max_depth 记得传引用或者使用全局变量代码:/*struct TreeNode { int val; ...原创 2018-11-28 21:36:44 · 109 阅读 · 0 评论 -
11月27日 剑指offer 数字在排序数组中出现的次数 && Leetcode Valid Parentheses
题目描述统计一个数字在排序数组中出现的次数。解析:其实就是实现下lower_bound 和 upper_bound 。我们只要找到第一个出现的k然后找到最后一个出现的k即可。我们拿找到第一个k举例子。因为是有序的,所以肯定使用二分。那么首先得到mid值。然后分三种情况1)如果data[mid] == k ,那么里面分2种情况,(1)如果(mid>0&&da...原创 2018-11-27 23:10:09 · 238 阅读 · 0 评论 -
11月26日 每日一题 leetcode 8. String to Integer (atoi) && 剑指offer 两个链表的第一个公共结点
String to Integer (atoi) 题目:Implement atoi which converts a string to an integer.The function first discards as many whitespace characters as necessary until the first non-whitespace character is fo...原创 2018-11-26 21:03:22 · 148 阅读 · 0 评论 -
剑指offer 把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解析:此题的精髓在与那个排序函数,可以得到较小的组合,最后从前往后加就是答案。代码:/*这个题目思路:可以将这个数组的元素看成每个字符串,然后对其进行排序,从小到大,所以最重要的是排序规则,所以排序规则为A ...原创 2018-09-21 13:05:11 · 169 阅读 · 0 评论 -
剑指offer&&Leetcode 动态规划专题
1:连续子数组的最大和题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个...原创 2018-09-13 22:45:43 · 237 阅读 · 0 评论 -
剑指offer&&Leetcode 数据结构专题
最小的K个数题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。法1:每次选一个最小的数,然后和前面的交换,那么时间复杂度就是O(K*N)代码:class Solution {public: vector<int> GetLeastNumbers_Solution(vector&...原创 2018-09-12 21:34:56 · 489 阅读 · 0 评论 -
剑指offer 字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解析:这是一个字符串的全排列,所以使用回溯法解决。代码:#include "stdafx.h"#includ...原创 2018-09-11 22:24:10 · 198 阅读 · 0 评论 -
美团面试题 区间统计
文巨做的,思路很好解析:这道题可以直接枚举区间,然后从一个区间[L,R]到[L+1,R+1]的时候,把a[L]的个数剪1,a[r+1]的个数加1,如果sum[a[L]]变为t-1,那么说明a[L]是那个满足区间内大于等于t的,所以总数-1,如果新加入的a[R+1]的sum等于t,说明是新加入的,那么总数+1。代码:#include&lt;cstdio&gt;#include&...原创 2018-09-07 10:41:49 · 294 阅读 · 0 评论 -
拼多多笔试题 找字典序最小的不同的字符串
解析看代码注释:#include<iostream>#include<algorithm>#include<vector>#include<unordered_set>#include<string>using namespace std;bool permutation(vector<string>&...原创 2018-08-31 16:23:39 · 1060 阅读 · 0 评论 -
拼多多笔试题 循环小数的开始位置和循环节
题目: 给出被除数和除数,求出循环小数的开始位置(小数点之后的位数)和循环长度。输入: 第一行包含两个数字分别是被除数a和除数b (1<= a, b <= 1000000)输出:输出一行,包含一个两个数字,分别表示循环小数的开始位置和循环体的长度(无循环则开始位置为结束位置,长度为0)解析:模拟长除法的计算过程。①mod = a%b;②小数 = (mod...原创 2018-08-31 13:01:12 · 1293 阅读 · 0 评论 -
拼多多笔试题 回合制角色扮演
题目:你在玩一个回合制 角色扮演的游戏。现在你在准备一个策略,以便在最短的回合内击败敌方角色。在战斗开始时,敌人拥有HP格血量。当血量小于等于0时,敌人死去。一个缺乏经验的玩家可能简单地尝试每个回合都攻击。但是你知道辅助技能的重要性。在你的每个回合开始时你可以选择以下两个动作之一:聚力或者攻击聚力会提高你下个回合攻击的伤害。攻击会对敌人造成一定量的伤害。如果你上个回合使用了聚力,...原创 2018-08-31 12:07:40 · 711 阅读 · 0 评论 -
拼多多笔试题 棋盘石子障碍物
题目:有个长方形的棋盘,每个格子可能是以下三种情况,A,放有障碍物,不可移动。 B 放置着小木块,C 格子为空如果把棋盘竖起来,小木块会向下掉落,直至落到障碍物上或者落到障碍物上叠加着的小木块上,如果底部没有障碍物时,则会掉出棋盘。请问棋盘的最终状态。输入描述:第一行包括2个整数N,M(N>=1,M<=10),分别表示棋盘的高度以及宽度。接下来N*M的矩阵表示了从上到下...原创 2018-08-31 11:32:57 · 870 阅读 · 2 评论 -
剑指offer&&Leetcode 之 二进制系列
1:二进制中1的个数题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:这个题目考查二进制的思想,有一个小诀窍,当一个数n-1时候,它的二进制和n的二进制表示,就是从后往前数,第一个1变成0,然后这个1后面的0全部变成1,然后n&amp;(n-1)我们就会发现n的从后往前数第一个1变成了0。例如:n为101100 那么n-1为101011 那么n&amp;n-...原创 2018-08-28 09:08:32 · 245 阅读 · 0 评论 -
剑指offer 栈_队列类题目
1:用两个栈实现队列题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解析:题目中有两个栈stack1和stack2,用来模拟队列的操作,我是想把第一个stack1作为数据存储,第二个stack2作为中转。队列的特点是先进先出, 1:入队操作,因为用stack1作为存储,首先得判断上一次stack2的数据又放回去没,一进一出stack1刚好维...原创 2018-08-25 15:06:03 · 176 阅读 · 0 评论 -
剑指offer 链表系列题目
1: 从尾到头打印链表题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解析:既然是从尾到头打印链表,那么这种先遍历最后出来的,不正符合栈的结构么?所以使用栈保存这些节点的值即可。代码:/*** struct ListNode {* int val;* struct ListNode *next;* Lis...原创 2018-08-24 21:19:42 · 211 阅读 · 0 评论 -
剑指offer 替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解析:这是我第二遍做,看了以前提交的,就是抓住一个漏洞,看了剑指offer才知道这个题目的真正含义 在网络编程中,如果URL参数中含有特殊字符,如空格,‘#’等,则可能导致服务器端无法获取正确的参数值。我们需要将这些特殊符号...原创 2018-08-20 21:55:12 · 105 阅读 · 0 评论 -
剑指offer 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析: 因为从左往右和从上到下都是递增的,所以可以选择右上角的那个元素为基准,然后判断大小,对坐标进行改变。代码:class Solution {public: bool ...原创 2018-08-20 20:59:38 · 140 阅读 · 0 评论 -
剑指offer 数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。解法一:其实很简单,两行代码就搞定,就是用C++ stl里面的lower_bound和upper_bound,lower_bound是找出不小于即大于等于的第一个数的下标 upper_bound是找出大于的第一个数的下标代码:class Solution {public: int GetNumberOfK(vector<...原创 2018-08-13 20:43:00 · 114 阅读 · 0 评论 -
剑指offer 链表中倒数第k个结点
题目: 输入一个链表,输出该链表中倒数第k个结点。解析:怎么在遍历一次的前提下就能求得链表的倒数第k个结点呢?可以设置两个指针,p和q,并且都将其初始值置为头p = q = pListHead;然后让p先走k-1步,那么就到了正数第k个结点,然后这时候让p和q同时走,直到p的下一个结点为空,因为设链表长度为L,那么q到底走了多长呢?q走的长度为链表长度减去p第二次走的长度,即为...原创 2018-05-31 10:46:48 · 304 阅读 · 0 评论 -
剑指offer 二叉树系列
首先打个广告,对C++后台(主要是在基础学习和找工作这一块)感兴趣的可以加QQ群大家可以相互学习,有问题大家也可以相互讨论,加群号码745354447。题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并...原创 2018-04-08 22:19:02 · 160 阅读 · 0 评论 -
剑指offer 数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。首先在剑指offer上这个题目说的不是很清楚,两个函数的意思是,一个Insert函数代表插入一个数到序列中,而GetMedian函数表示返回一个中位数。思路: 首先根据题目描述,可以试想将数据分为两个堆原创 2017-12-26 15:38:37 · 243 阅读 · 0 评论 -
剑指offer 按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:典型的层次遍历,但是要按之字形打印,所以遍历的时候要分奇偶层,则要在遍历里稍微改动一下,一次要遍历一层,而不是一次只遍历一个结点。代码:/*struct TreeNode { int val; struct TreeNod原创 2017-12-18 14:11:25 · 193 阅读 · 0 评论 -
剑指offer 对称的二叉树
题目: 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路: 镜像二叉树就是左右子树对称,则比较左子树的左结点和右子树的右结点,左子树的右结点和右子树的左边结点进行比较。注意判断如果同时为空为真,但是一个空一个不是那么就绝对不是镜像二叉树。 代码:/*struct TreeNode { int val;原创 2017-12-18 13:59:36 · 200 阅读 · 0 评论 -
剑指offer 矩阵中的路径
题目: 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个原创 2017-12-17 22:53:58 · 159 阅读 · 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原创 2017-12-17 22:50:49 · 154 阅读 · 0 评论 -
剑指offer 机器人的运动范围
题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:很简单的bfs应用,注意memset初始原创 2017-12-09 20:49:10 · 291 阅读 · 0 评论 -
剑指offer 二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:首先那个指向父结点的指针是next,很多人没有理解清楚,所以要中序遍历,那么首先得找到头结点,就根据提供的那个结点去找到头结点,然后就是中序遍历,可以使用一个list保存中序遍历的结果。代码:/*struct TreeLinkNode {原创 2017-12-09 20:44:12 · 139 阅读 · 0 评论 -
剑指offer 删除链表中重复的结点
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:主要是细节的处理 首先如果头部要删除,那么是很复杂的事,因为是一个升序链表,所以在头部的前面加一个val-1的头结点,那么就可以从头部慢慢处理了。保存已经出现过的结点数目,然后从头开始遍历,保持两个指针,一个原创 2017-12-09 20:31:58 · 180 阅读 · 0 评论 -
剑指offer 构造乘积数组
题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。 思路:因为不能使用除法,所以求前缀啥的还是不行 ,所以先看一张图: 所以如果要求B[i]可以先求上三角再求下三角,例如下三角是B[0] = 1,B[1] = B[0]*A[0,]B[I] = B[I-原创 2017-12-09 20:06:35 · 162 阅读 · 0 评论
分享