剑指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 · 802 阅读 · 0 评论 -
剑指offer&&Leetcode 动态规划专题
1:连续子数组的最大和题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个...原创 2018-09-13 22:45:43 · 221 阅读 · 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<cstdio>#include&...原创 2018-09-07 10:41:49 · 259 阅读 · 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 · 463 阅读 · 0 评论 -
剑指offer 字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解析:这是一个字符串的全排列,所以使用回溯法解决。代码:#include "stdafx.h"#includ...原创 2018-09-11 22:24:10 · 168 阅读 · 0 评论 -
剑指offer 栈_队列类题目
1:用两个栈实现队列题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解析:题目中有两个栈stack1和stack2,用来模拟队列的操作,我是想把第一个stack1作为数据存储,第二个stack2作为中转。队列的特点是先进先出, 1:入队操作,因为用stack1作为存储,首先得判断上一次stack2的数据又放回去没,一进一出stack1刚好维...原创 2018-08-25 15:06:03 · 157 阅读 · 0 评论 -
剑指offer 链表系列题目
1: 从尾到头打印链表题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解析:既然是从尾到头打印链表,那么这种先遍历最后出来的,不正符合栈的结构么?所以使用栈保存这些节点的值即可。代码:/*** struct ListNode {* int val;* struct ListNode *next;* Lis...原创 2018-08-24 21:19:42 · 185 阅读 · 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 · 1000 阅读 · 0 评论 -
拼多多笔试题 循环小数的开始位置和循环节
题目: 给出被除数和除数,求出循环小数的开始位置(小数点之后的位数)和循环长度。输入: 第一行包含两个数字分别是被除数a和除数b (1<= a, b <= 1000000)输出:输出一行,包含一个两个数字,分别表示循环小数的开始位置和循环体的长度(无循环则开始位置为结束位置,长度为0)解析:模拟长除法的计算过程。①mod = a%b;②小数 = (mod...原创 2018-08-31 13:01:12 · 1239 阅读 · 0 评论 -
拼多多笔试题 回合制角色扮演
题目:你在玩一个回合制 角色扮演的游戏。现在你在准备一个策略,以便在最短的回合内击败敌方角色。在战斗开始时,敌人拥有HP格血量。当血量小于等于0时,敌人死去。一个缺乏经验的玩家可能简单地尝试每个回合都攻击。但是你知道辅助技能的重要性。在你的每个回合开始时你可以选择以下两个动作之一:聚力或者攻击聚力会提高你下个回合攻击的伤害。攻击会对敌人造成一定量的伤害。如果你上个回合使用了聚力,...原创 2018-08-31 12:07:40 · 683 阅读 · 0 评论 -
拼多多笔试题 棋盘石子障碍物
题目:有个长方形的棋盘,每个格子可能是以下三种情况,A,放有障碍物,不可移动。 B 放置着小木块,C 格子为空如果把棋盘竖起来,小木块会向下掉落,直至落到障碍物上或者落到障碍物上叠加着的小木块上,如果底部没有障碍物时,则会掉出棋盘。请问棋盘的最终状态。输入描述:第一行包括2个整数N,M(N>=1,M<=10),分别表示棋盘的高度以及宽度。接下来N*M的矩阵表示了从上到下...原创 2018-08-31 11:32:57 · 832 阅读 · 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 · 208 阅读 · 0 评论 -
剑指offer 把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解析:此题的精髓在与那个排序函数,可以得到较小的组合,最后从前往后加就是答案。代码:/*这个题目思路:可以将这个数组的元素看成每个字符串,然后对其进行排序,从小到大,所以最重要的是排序规则,所以排序规则为A ...原创 2018-09-21 13:05:11 · 152 阅读 · 0 评论 -
11月28日 剑指offer 二叉树的深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解析:二叉树的遍历 想法是递归分第三种情况1)当遇到空节点的时候 则更新max_depth的值2)递归遍历左节点3)递归遍历右节点注意事项 max_depth 记得传引用或者使用全局变量代码:/*struct TreeNode { int val; ...原创 2018-11-28 21:36:44 · 99 阅读 · 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 · 133 阅读 · 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 · 150 阅读 · 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 · 137 阅读 · 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 · 114 阅读 · 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 · 140 阅读 · 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 · 95 阅读 · 0 评论 -
2019/3/16 字节跳动笔试题
有n个人参加编程比赛,比赛结束后每个人都得到一个分数;现在所有人排成一圈(第一个和第n个相邻)领取奖品,要求;1:如果某个人的分数比左右的人高,那么奖品数量也要比左右的人多;2:每个人至少得到有个奖品。问最少应该准备多少奖品。输入描述:第一行是整数n,表示测试样例个数每个测试样例的第一行是一个正整数n,表示参加比赛的人数;(0<n<100000)第二行是n个正整数a[i]...原创 2019-03-17 02:35:26 · 1898 阅读 · 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 · 639 阅读 · 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 · 389 阅读 · 0 评论 -
腾讯内推笔试题之_气球颜色
题目:解析:其实维护一个m个大小的数组即可,然后每次进入的时候判断一下是否为一种新的颜色,如果是则总的颜色总数color_sum++,当达到m的时候去的最小坐标和最大坐标,随机更新答案,如果不是新的颜色,就用当前颜色的下标去覆盖即可,有种贪心的思想在里面,时间复杂度O(n*m)代码:#include<cstdio>#include<map>#include<...原创 2019-03-10 14:48:25 · 628 阅读 · 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 · 220 阅读 · 0 评论 -
11月29日 剑指offer 平衡二叉树 && Leetcode
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解析:首先得明白平衡二叉树的定义,就是左右子树高度差的绝对值不超过1。所以用递归可以解决,对二叉树进行左右遍历,然后得到左右子树的高度,判断绝对值的值是否大于1,然后一个节点的高度取决于return max(left_depth, right_depth);代码:int tryTree(TreeNode* curNode, int ...原创 2018-12-02 21:24:31 · 740 阅读 · 0 评论 -
剑指offer 替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解析:这是我第二遍做,看了以前提交的,就是抓住一个漏洞,看了剑指offer才知道这个题目的真正含义 在网络编程中,如果URL参数中含有特殊字符,如空格,‘#’等,则可能导致服务器端无法获取正确的参数值。我们需要将这些特殊符号...原创 2018-08-20 21:55:12 · 93 阅读 · 0 评论 -
剑指offer 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析: 因为从左往右和从上到下都是递增的,所以可以选择右上角的那个元素为基准,然后判断大小,对坐标进行改变。代码:class Solution {public: bool ...原创 2018-08-20 20:59:38 · 116 阅读 · 0 评论 -
剑指offer 数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。解法一:其实很简单,两行代码就搞定,就是用C++ stl里面的lower_bound和upper_bound,lower_bound是找出不小于即大于等于的第一个数的下标 upper_bound是找出大于的第一个数的下标代码:class Solution {public: int GetNumberOfK(vector<...原创 2018-08-13 20:43:00 · 102 阅读 · 0 评论 -
剑指offer 求1+2+3+..+n
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路:利用&&的短路性质,使用递归实现代码:class Solution {public: int fac(int n) { int sum=0; n&&(sum=n+fac(n原创 2017-12-09 18:42:21 · 215 阅读 · 0 评论 -
剑指offer 和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?Good Luck!输出描述:输出所有和为S的原创 2017-11-20 15:41:08 · 169 阅读 · 0 评论 -
剑指offer 平衡二叉树
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:在得到树的高度之后,对左右树的高度进行判断,如果绝对值之差大于1则不是平衡二叉树。代码:class Solution {public: bool ok = true; int abs(int a,int b) { if(a>b) return a-b; e原创 2017-11-20 14:43:34 · 155 阅读 · 0 评论 -
剑指offer 求二叉树的深度
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:直接后序遍历,然后在同时遍历完左右节点以后取最大值。代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode原创 2017-11-20 14:37:23 · 179 阅读 · 0 评论 -
剑指offer 两个链表的第一个公共节点
题目描述:输入两个链表,找出它们的第一个公共结点。思路:首先如图所示,什么是公共节点,也就是从这个节点开始所有的节点都相同,所以从最后一个节点到第一个相同的节点都相同,所以枚举两个链表的长度,然后求出两链表长度之差,然后同步到同样位置开始遍历,第一个相同点则为第一个公共点。代码:/*struct ListNode { int val; struct ListNod原创 2017-11-20 14:32:04 · 334 阅读 · 0 评论 -
剑指offer 复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)这题最开始没读懂什么意思,后来是看别人的题解解决的,题目其实就是字面意思,就是将这个带有random指针的链表复制一下,然后得到新链表的表头head。思路:首先将链原创 2017-11-05 18:53:12 · 177 阅读 · 0 评论 -
剑指offer 数组中的逆序对
题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述: 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于...原创 2017-11-19 10:37:05 · 198 阅读 · 0 评论 -
剑指offer 数组中出现次数超过一半的数
题目:这个题目在以前考研时的王道书里看到过。数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路:观察数组的性质,如果次数超过一半,那么比其他所有元素出现的次数还要多,所以可以对每个数进行如下处理。首先假设第一个数为这个...原创 2017-11-04 11:59:12 · 218 阅读 · 0 评论 -
剑指offer 连续子数组的最大和
题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度原创 2017-11-03 22:44:19 · 182 阅读 · 0 评论 -
剑指offer 顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路:这是一个回形矩阵问题,每次一个回形就是一个右,下,左,上,走完一圈,那么回形矩阵row-2,col-2,注意一定原创 2017-10-26 20:06:50 · 164 阅读 · 0 评论 -
剑指offer 二叉树中和为某一值的路径
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vect原创 2017-11-02 21:04:11 · 134 阅读 · 0 评论