算法题题解
文章平均质量分 90
carson0408
热衷于编程,喜欢研究算法,挑战难题,享受AC的过程,希望自己能够不断进步,不断成长。
展开
-
腾讯2017年暑期实习生编程题题解
本篇博客主要为了就腾讯2017年暑期实习生编程题做一个题解,和大家进行简单分享,也为了自己对基础算法的巩固。1.构造回文本题题目描述如上图,该题只需要进行稍微转化一下就是我们常见的算法题,首先最少需要删除字符,即求原序列的最大回文子序列(可不连续),那么最大回文子序列又可以转化为lcs问题,即原序列与逆序列的lcs问题。代码实现:import java.util.*;pu原创 2017-12-15 17:11:42 · 945 阅读 · 0 评论 -
Leetcode题解(六)
1.merge-k-sorted-lists这是一个将多个有序链表归并到一个链表的题目,可以以第一个链表为基准,每次两两归并,这样最终得到的链表就是归并排完序的链表。在归并函数中,可以先声明一个伪头指针,然后依次比较两个链表的结点值的大小,小的结点则连接上伪头结点上。/** * Definition for singly-linked list. * public class ListNode...原创 2018-03-31 10:37:19 · 230 阅读 · 0 评论 -
华为实习编程测试题解(2018-03-21)
做了华为的三道编程题,以下是题解:1.在字符串中找出连续最长的数字串题目大意:输入一个字符串,输出最长的连续数字字符串,并输出其长度,中间用逗号隔开。比如输入123abc,输出123,3另外,要求数字串中每个数字不要求按顺序,比如123ab2357中最长数字串应该是2357;而且,如果有多个最长串,则输出最后一个,比如123ab234,则答案输出是234,3。解题思路:首先用一个数...原创 2018-03-21 22:03:30 · 3439 阅读 · 0 评论 -
2018春招链家笔试编程题题解
1.Light在小红家里面,有n组开关,触摸每个开关,可以使得一组灯泡点亮。现在问你,使用这n组开关,最多能够使得多少个灯泡点亮呢?输入第一行一个n,表示有n组开关。接下来n行,每行第一个整数为k,表示这个开关控制k个灯泡,接下来k个整数,表示控制的灯泡序号。满足:1<=n<=10001<=k<=1000序号是在int范围内正整数。输出...原创 2018-04-08 20:56:17 · 801 阅读 · 0 评论 -
2018搜狐春招编程题题解(2018-04-14)
1.系统设计搜狐已经累计拥有千万级别会员用户,会员成长值公式为:会员成长值=每天成长值+任务成长值。输入一组数组,第一行是n,表示接下来有n行数据输入,从第二行开始,如果第一个是1,则该行有4个数据,第一个1表示每日成长规则,第二个数字表示开始时间,第三个数字表示截止时间,第四个数字表示每日成长值。如果第一个数字是2,则该行总共有3个数字,第二个数字表示某一天做任务,第三个数字表示任务成长值。两种...原创 2018-04-14 17:28:22 · 408 阅读 · 0 评论 -
2018春招京东实习编程题解
1.回文串 本题用暴力求解是2^n次,因此采用动态规划。以下附上暴力求解和动态规划的方法import java.util.ArrayList;import java.util.Scanner;public class Palindarome { //动态规划 public static long solve1(String s) { int len=s.length...原创 2018-04-09 21:36:10 · 848 阅读 · 4 评论 -
算法题解之网易2018春招编程之最大重叠矩形个数
题目描述:平面内有n个矩形,左下角坐标(x1[i],y1[i]),右上角坐标(x2[i],y2[i]),判断重叠矩形最大数目是多少。 * 如果有两个或多个矩形有公共区域,则认为它们是重叠的,不考虑边界和角落。请计算出平面内重叠矩形最多的地方的矩形数目。 * 输入包括五行,第一行表示矩形数目n,第二行x1-->左下角横坐标,第三行y1-->左下角纵坐标,第四行x2-->右上角横...原创 2018-03-27 21:41:38 · 1662 阅读 · 0 评论 -
Leetcode题解(四)
1.reverse-integer题目的意思是将一个数的正负符号后的数字进行翻转,比如123-->321,-123-->-321。可以采用数位翻转的想法,比如123-->321可以先用一个数来计算123的最高位是多少,这里是100,如果是23,则应该是10;然后令k=10,让123对k取余,此时获得的是原来数的个位,将其乘100,存入加到结果值ans中,然后原来的数值变为num/...原创 2018-03-28 14:36:16 · 437 阅读 · 0 评论 -
Leetcode题解(七)
1.substring-with-concatenation-of-all-words 这道题可以利用hashmap存储L数组里的字符串,并且需要注意的是有几种情况需要重新初始化hashmap,一种就是完成匹配,另一种就是匹配突然中间断开了。用一个k值来记录是否匹配完成,一旦中间断开k置0;用一个e值来记录一次匹配的初始位置,并且用一个布尔值判断是否更新初始位置,用i记录遍历的下标,...原创 2018-04-04 17:07:43 · 305 阅读 · 0 评论 -
Leetcode题解(八)
1.reverse-nodes-in-k-group这题跟reverse-in-pair的思路有些相同,只不过它是k个一组进行翻转,而rerverse-in-pair是k=2的情况。首先也是建立伪头指针,便于翻转后的链表的连接,另外就是链表的断开与连接,断开比较容易,就是用一个循环控制一组链表的个数即可。另外,链表的连接需要用三个临时变量,一个表示该k个结点链表的原来的头,以及原来的尾,同时需要保...原创 2018-04-07 21:59:02 · 159 阅读 · 0 评论 -
Leetcode题解(五)
1.3sum 根据题目的要求,需要按顺序输出,并且不重复,那么可以先将数组s进行排序,这可以保证输出结果是按顺序的,然后通过hashmap对每种新结果进行存储,如果有重复就不再存储。接着便是可以通过将数字进行存储进hash表,用两个循环进行遍历,前两个数确定之后,第三个数用hash进行查找。import java.util.*;public class Solution { ...原创 2018-03-30 09:33:50 · 167 阅读 · 0 评论 -
Nowcoder Girl 2017题目集合详解
这是对牛客网举办的Nowcoder Girl的编程比赛的题目做一个题解。1.勇气获得机这题主要是为了判断奇偶性,一种逆序的思维,根据倒序的方法求出结果翻转之后便是正确答案。代码如下:#-*-coding:utf-8-*-n=int(raw_input())s=''while(n>0): if(n%2==0): s+='G' n=(...原创 2018-03-15 14:06:55 · 1968 阅读 · 1 评论 -
动态规划之错排问题以及相应的变形
一.错排原理何谓错排?错排就是完全乱序,比如有n个人各有自己的编号,链接:https://www.nowcoder.com/questionTerminal/95e35e7f6ad34821bc2958e37c08918b来源:牛客网当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不原创 2017-12-29 09:50:41 · 1702 阅读 · 0 评论 -
算法题解之字符串的包含问题
本文主要讲的算法题是关于两个字符串A和B,求A在B中出现的次数,并且不要求A中的所有字符在B中连续出现,例如A=ab,B=abadcb,那么结果为3. 首先,我们假定:假如A为空字符串,B为非空,那么次数为1。而如果B为空字符串,那么次数为0。用L(i,j)表示A的i个字符在B的j个字符中出现的次数。除了之前的假定,我们现在动态地观察规律,假如A[i]=B[j]那么需要看A的前i原创 2018-01-31 10:32:33 · 746 阅读 · 0 评论 -
编程之美之小飞的电梯调度算法(多种解法)---Java语言
1.题目情景 我们假设都是从一楼上电梯的,而至于讯电梯停在其中的某一层。即所有的乘客都从一楼上电梯,到达某层之后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层,并且能够保证该层停使得所有乘客爬楼梯的层数之和最少。输入:第一行楼层数N,乘客人数n;第二行有n个数,表示乘客选择的目的层。输出:输出为停止楼原创 2018-01-28 11:16:19 · 2016 阅读 · 2 评论 -
算法题解之容斥原理
我们有时候在解题的时候,将问题分成几个子问题,然后叠加,但是答案中有重复解,也就是这些子问题相互具有重叠的部分,如果不分成子问题那么无疑会使解题过程变得更加麻烦。这时候容斥原理可以帮助解决这一难题。容斥原理就是先将子集问题的解相加,然后减去重复的解,再加上减的过程中重复减的部分,依次递推。1.何谓容斥原理 在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的原创 2018-02-06 11:39:41 · 2646 阅读 · 1 评论 -
算法题解之质数问题
求质数是一个常见的问题,但是求质数的难点在于复杂度上的拿捏,一些面试官都知道判断一个数是否是质数并难不倒大多数人,于是他们可能会让问题更加深入,比如复杂度的控制等等。本文主要讲解一些面试或者笔试中可能会碰到的题目。1.判断质数 首先从最基本的判断质数开始讲解,从质数定义出发:一个数只能被1和其本身整除,则该数为质数。判断一个数a是否是质数,则判断是否在2-(a-1)存在一个整原创 2018-02-06 14:08:47 · 1983 阅读 · 0 评论 -
算法题解之求数字1的个数及相应的推广
给定一个十进制正整数n,求1-n的所有整数中出现"1"的个数,比如:n=2,则出现1个1;n=12,则出现5个"1"。接下来通过两种方法进行求解,首先第一种便是暴力求解法,即遍历1-n,并判断每个数的每位上的数字是否为1,进行相加,因此时间复杂度为O(n*logn)。另外一种的思路便是通过依次统计每一位上为1的情况,最终相加,因此该时间复杂度为O(log(n的位数))。可以看出第二...原创 2018-02-27 22:35:16 · 772 阅读 · 0 评论 -
算法题解之寻找最大的k个数
一般看到寻找最大的k个数的题目,我们第一想法便是先使用降序排序,然后取前k个即可,这种方法确实是比较常规的,一般情况下也是可行的,但是如果数据十分庞大,则会影响使得创建的数组内存溢出等等。因此,需要对相关算法思路进行优化,以下是几种不同解法。通过不同解法比较从而更理解该算法题。1.简单排序法 从n个数中直接先排序,然后求最大的k个,从而获取最大的k个数。代码如下:pa...原创 2018-02-28 14:03:46 · 3133 阅读 · 0 评论 -
算法题解之最大公约数(gcd)
1.辗转相除法 辗转相除法是平时求gcd问题最常见的解法,该解法通过将原问题转化为两个更小数的最大公约数的问题,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。package gcd;import java.util.*;public class Gcd1 { private static int gcd(int a,int b) { if(a%b==0) ...原创 2018-02-28 21:43:11 · 1075 阅读 · 0 评论 -
腾讯实习题解
1.n和m,n表示1-n共有n个数,而m表示m个一组,然后以一组减一组加的规律进行操作。比如n=4,m=2,则表示-1-2+3+4;找规律,可以以一组减一组加为一组,即t=n/(2*m)。可以发现减组与加组对应的和等于m,又因为长度为m,所以最终结果为t*m*m。注意需要用long数据类型。import java.util.Scanner;public class ReverseSe { ...原创 2018-04-05 18:01:13 · 249 阅读 · 0 评论