刷题
文章平均质量分 67
练习一些小算法~~
peiyao456
这个作者很懒,什么都没留下…
展开
-
笔试面试中涉及位运算的题目总结(一)
题目一:题目描述有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。测试样例:2返回:[1,4]题目分析: 对于这道题目,我觉得最重要的就是求一个数的二进制表示中1的个数。关于求一个数的二进原创 2017-02-08 19:09:07 · 1009 阅读 · 1 评论 -
【笔试练习】百度笔试题(一)
1、裁剪网格纸题目描述度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。 输入描述: 第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,y原创 2017-02-04 15:09:43 · 937 阅读 · 0 评论 -
【笔试练习】美团笔试题(一)
1、棋子翻转题目描述在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。给定两个数组A和f,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。测试样例:[[0,0,1,1],[原创 2017-02-03 12:55:48 · 10206 阅读 · 0 评论 -
【笔试练习】腾讯2016笔试题
1.生成格雷码在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。测试样例:1返回:["0","1"]问题分析:对于这样的题目,我们可以进行找规律完成。当n == 1时,生成的1位格雷码是“0”,“1”原创 2017-02-02 18:04:44 · 1299 阅读 · 0 评论 -
【笔试练习】去哪儿笔试题
1、二分查找题目描述:对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。 测试样例: [1,3,5,7,9],5,3 返回:1代码实现:class BinarySearch原创 2017-02-01 17:00:17 · 994 阅读 · 0 评论 -
【贪心算法】背包问题
在之前的《算法设计与分析》课程的学习中,我们就接触到了贪心算法解决背包问题,当然还有动态规划法解决0-1背包问题等等。今天我就来分析贪心法解决背包问题。为了大家可以理解贪心算法,我先分享一道比较简单的题目。问题描述:给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No; 第一行有一个整数0问题分析:看到这个原创 2017-01-30 21:32:49 · 1496 阅读 · 0 评论 -
【剑指offer】面试题42-翻转单词顺序VS左旋转字符串
题目一:问题描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。比如输入字符串”I am a student.”输出字符串”student. a am I”.问题分析:这种题目比较简单,翻转两次字符串就可以。第一次翻转整体字符串,第二次翻转单个单词。当然两次顺序可以颠倒~~实现起来比较简单,主要就是翻转函数。代码实现:#include<io原创 2017-01-29 21:04:30 · 531 阅读 · 1 评论 -
【剑指offer】面试题41-和为S的两个数VS和为S的连续正数序列
题目一:问题描述:输入一个递增的数组和一个数字s,在数组中查找两个数,使得他们的和刚好是s,如果有多对数字的和是s,输出任意的一对即可。问题分析:方法1:简单粗暴的办法。 具体实现:从数组的第一个数开始,依次判断其余的数与该数的和是不是s,这样就可以解决问题。时间复杂度是O(N*N)。 方法2:上边的方法虽然可以解决问题,但是它却没有利用题目最重要的条件–数组是升序的。有了这个最重要的条件,题目原创 2017-01-26 19:24:51 · 484 阅读 · 0 评论 -
【剑指offer】面试题40-数组中只出现一次的数字
问题描述:一个整形数组中除了两个数字外,其他数字都出现了两次,请找出这两个只出现一次的数字。时间复杂度为O(N),空间复杂度为O(1)。问题分析:看到这个问题,或许有些人就是不知道从何下手。如果说题目中是只有一个数字只出现一次,找出这个数字。我们可以遍历数组,也可以根据异或的性质,将所有的数字进行异或,得到的结果就是在只出现一次的数字。 在本题目中,如果我们可以确定只出现一次的两个数字中的其他一个原创 2017-01-25 11:56:28 · 389 阅读 · 0 评论 -
【剑指offer】面试题39-二叉树的深度
题目一:问题描述:输入一棵二叉树的根节点,求出二叉树的深度。二叉树的深度就是二叉树中从根节点到叶子结点形成的最长路径的长度。问题分析:求出左子树的深度和右子树的深度,树的深度就是左右子树深度较大值加1.代码实现:#include<iostream>using namespace std;#include<cassert>struct BinaryNode{ int _data;原创 2017-01-24 13:29:18 · 664 阅读 · 0 评论 -
【剑指offer】面试题38-数字在排序数组中出现的次数
问题描述:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3字数组中出现了4次,因此输出4.问题分析:方法1:利用二分查找的思想,找到中间数据是不是给定的数字,如果是,则继续前后进行遍历,统计次数。如果不是的话,按照中间数字与给定数字的大小比较,去前半区间或者后半区间去查找。这样的话,时间复杂度就是O(N)(N是数组中元素的个数)。 方法2:上边原创 2017-01-23 14:23:29 · 791 阅读 · 0 评论 -
【剑指offer】面试题37-两个单链表的第一个公共结点
问题描述:输入两个链表,找出链表的第一个公共结点。问题分析:方法1:粗暴的办法。 从一个链表的第一个结点开始,再另一个链表上查找是否是交点(指向结点的指针一样),这样的话,如果一个链表的长度是m,另一个链表的长度是n,则时间复杂度是O(mn)。 方法2: 我们知道链表相交,不仅仅只是结点里的data值一样,next指针也是一样的,也就是说,如果两个链表从某一个结点处开始相交,那么之后两个链表一原创 2017-01-22 20:37:58 · 989 阅读 · 0 评论 -
【剑指offer】面试题36-数组中的逆序对
题目描述:在数组中的两个数字如果前边的数字大于后边的数字,则这两个数值组成一个逆序对。输入一个数组,求出这个数组中逆序对的总数。问题分析:方法1:粗暴的办法。 具体实现方法:从数组中的第一个元素开始进行遍历,每次都去该元素之后的元素中查找多少个小于当前元素的值,然后进行统计。返回结果即可。 时间复杂度O(N*N),空间复杂度O(1)。 方法2:归并排序的思想。 由于上述方法的时间复杂度比较高原创 2017-01-21 14:54:31 · 614 阅读 · 0 评论 -
【剑指offer】面试题35-第一个只出现一次的字符
问题描述:在字符串中找出第一个只出现1次的字符。如输入“abaccdeff”,输出b。问题分析:方法1:最直白最粗暴的方法。 具体实现方法:对于字符串中的每一个字符,都去遍历字符串,查找是否是只出现了一次。这样一来,时间复杂度是O(N*N),N是字符串中字符的个数。这样的办法往往不是最好的办法。 方法2:哈希法。 既然上边的方法时间复杂度太高,我们可以采用空间换取时间的哈希法去解决问题。 具原创 2017-01-20 15:12:52 · 686 阅读 · 0 评论 -
【剑指offer】面试题34-丑数
问题描述:我们把只包含因子2,3,5的数称为丑数,求按照从小到大的顺序的第1500个丑数。例如6,8都是丑数,但14不是,因为14含有因子7.我们习惯上把1当做第一个丑数。问题分析:方法1:从1开始,对每一个数都进行判断,看是否只含有2,3,5的因子,直到找到第1500个丑数为止。这种方法理解起来比较容易,但是却做了很多无用功,比如,对于非丑数,都进行了模除模除的操作,所以,时间上是比较浪费的。原创 2017-01-19 12:45:07 · 654 阅读 · 2 评论 -
【剑指offer】面试题33-把数组排成最小的数
题目描述:输入一个正整数的数组,把数组里的所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。并给出算法的证明。比如输入数组,{3,32,321},则打印出这3个数字能排出的最小的数字是321323.题目分析:这个题目最简单的做法也就是最容易想到的解法就是把数组中的数字进行全排列,求出最小的数。这样不是不可以,只是时间空间复杂度比较大。 下边从一个简单的例子开始分析: 假如给定的数组原创 2017-01-18 22:48:40 · 836 阅读 · 0 评论 -
【剑指offer】面试题32-从1到n整数中1出现的次数
题目描述:输入一个整数N,求出1~N这N个整数的十进制表示形式中 1出现的次数。比如输入12,从1~12这12个整数中包含1的数字有:1,10,11,12,1总共出现了5 次。题目分析:看到这个题目,大多数人的想法或许就是:循环遍历1~N中的每一个数,然后求出每个数中1的个数,然后求和。这样做的话,需要将N个数遍历一遍,然后将每个数的每一位遍历一次,时间复杂度是比较高的(大于O(N)),所以我们依然原创 2017-01-17 19:24:05 · 667 阅读 · 0 评论 -
【剑指offer】面试题31-连续子数组的最大和问题
题目描述:输入一个整形数组,数组中有正数也有负数。数组中一个或多个连续的整数组成一个子数组,求所有子数组和的最大值,时间复杂度为O(N)。题目分析:对于这道题目,我们大多数人一下子就可以想到:我可以列出一个数组的所有的子数组,然后求和,选出最大的和就是需要的结果。如果这样做的话,子数组的个数就是n(n+1)/2(n为数组的长度).并且求子数组的和的复杂度也不是O(1),所以这样的方法的时间复杂度一定原创 2017-01-16 13:32:21 · 769 阅读 · 0 评论 -
【leetcode】单链表的插入排序
单链表的直接插入排序排序思想跟数组的插入排序的思想是一样的。但是这里涉及到链表的插入删除等等,一些操作,实现起来还是稍微麻烦的。链表的直接插入:情况1:当前结点的值大于上一个结点的值,不用处理,直接去处理下一个结点;情况2:当前结点的值小于第一个结点的值,将当前结点插入到链表的开始。情况3:不满足上述两种情况的情况。也就是当前结点的值大于第一个结点的值,小于上一个结点的值时原创 2017-01-04 19:43:10 · 876 阅读 · 0 评论 -
【剑指offer】判断是否是对称的二叉树
对于一棵二叉树,如何判断这棵二叉树是否是对称的二叉树?例如:从以上的图中我们可以看出,关于根节点左右对称的二叉树就是对称的二叉树,那么在程序中我们需要如何判断呢?在二叉树的先序遍历中,先访问根结点,再访问左子树,再访问右子树。如果是对称的二叉树,那么它的左右子树应该是一样的,也就是先访问根,再访问右子树,最后访问左子树得到的结果应该是一样的。对于上图中的第一幅图,原创 2016-12-24 11:07:16 · 1085 阅读 · 0 评论 -
金山笔试题中的SwapSort
问题描述:对一个数组按照给定的下标进行排序,仅使用两两交换的方式,要求不能对数组进行扩容,尽可能少的额外空间。如:原数组为A,B,C,D,E现给定的新位置为3,0,1,4,2那么排序后为D,A,B,E,C。函数原型:void SwapSort(int a[],int pos[],int n)很久一段时间之前,在看金山的笔试题的时候,就看到这个问题,当时可真算是一脸懵逼。直到现在再原创 2016-12-17 17:51:14 · 896 阅读 · 0 评论 -
牛客---特殊排序
题目描述输入一个数组的值,求出各个值从小到大排序后的次序。 输入描述:输入有多组数据。每组输入的第一个数为数组的长度n(1输出描述:各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。输入例子:4-3 75 12 -3输出例子:1 3 2 1【分析】看到这个问题,我们首先,要将给定的数组进行排序,但是又不能在原数组中排序原创 2016-12-15 16:37:35 · 646 阅读 · 0 评论 -
牛客网刷题----奇偶校验
题目描述输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。 输入描述:输入包括一个字符串,字符串长度不超过100。输出描述:可能有多组测试数据,对于每组数据,对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。输入例子:33a输出例子:10110011原创 2016-12-12 22:01:15 · 812 阅读 · 0 评论 -
牛客---大整数的排序
题目描述对N个长度最长可达到1000的数进行排序。 输入描述:输入第一行为一个整数N,(1<=N<=100)。接下来的N行每行有一个数,数的长度范围为1<=len<=1000。每个数都是一个正数,并且保证不包含前缀零。输出描述:可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。输入例子:3111111原创 2016-12-13 18:34:03 · 601 阅读 · 0 评论