数据结构和算法
暴躁的猴子
比你优秀的人比你更努力!
展开
-
面试题:从n个数中找出第K大的数
参考https://blog.csdn.net/orangefly0214/article/details/84997668的思路从有n个元素的乱序数组中找出第k大的元素方法1:基于冒泡排序和简单选择排序,时间复杂度o(n*k)我们知道,在冒泡排序和简单选择排序中,最外层的循环每遍历一次,都可以把第i大(或第i小)的数排到数组的最前面,所以我们用这种方法,最外面经过k次遍历之后,就可以...原创 2019-01-17 17:27:12 · 50629 阅读 · 10 评论 -
面试题(括号匹配)
题目描述:给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。输出:true:代表括号成对出现并且嵌套正确,或字符串无括号字符。false:未正确使用括号字符。思路:同leetcodehttps://blog.csdn.net/orangefly0214/article/details/82622480括号匹配问题要用...原创 2019-04-27 00:28:09 · 2243 阅读 · 0 评论 -
DP系列-最长公共子串和最长公共子序列总结
知识点:最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。例如:str1="123ABCD4567" str2 ="ABE12345D6"最长公共子串是:123最长公共子序列是:1234561.最长公共子串题目描述:计算两个字符串的最大公共字串的长度,字符不区分大小写。...原创 2019-04-22 23:35:44 · 518 阅读 · 0 评论 -
面试题:求2个有序数组的有序交集
给定2个有序数组,求它们的交集(不允许有重复的结果)思路:双指针:p1指向arr1的开头,p2指向arr2的开头,然后进行比较,如果p1与p2指向的数相等,则将这个数加入结果集。然后p1++,p2++,再继续遍历。如果p1指向的数小于p2指向的数,则p1++,否则p2++;实现:要求结果中不含重复的数,则选用TreeSet而不用ArrayListpublic TreeSet<...原创 2019-04-18 23:36:04 · 3427 阅读 · 0 评论 -
背包问题总结
最近看了很多背包问题相关的算法,现对其总结如下。几种常见的类型: 0/1背包问题(特点:对第i件物品的两种选择,放或不放) 题目:有N件物品和一个容量为V 的背包。放入第i件物品耗费的费用是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大。基本思路:空间优化: 完全背包问题 题目:基本思路:解决方法:转换...原创 2019-06-12 16:19:31 · 318 阅读 · 0 评论 -
笔试题-链表部分翻转
遇到一道看似简单,然而实际操作起来却没那么简单的笔试题,现总结如下,虽然实现了功能,但却不知道是否是一个可行的优解,暂时记录一下。题目描述:将一个单向链表的第M个位置和第N个位置间的元素顺序倒转,输出倒转后的链表。例如:输入:3 5115822 9 5 0说明:第一行的两个整数表示链表位置M,N;第二行表示链表元素M,N输出:11 5 9 22 8 ...原创 2019-06-08 22:51:33 · 767 阅读 · 0 评论 -
笔试题-给定金额,如何购买获得最高热度值
题目描述:vivo2019提前批笔试第三题:小v负责一次活动礼品采购,每一款礼品的受欢迎程度(热度值)各不相同,现给出总金额以及各个礼品的单价和热度值,且每个礼品只购买一个,如何购买可以使得所有礼品的总热度值最高。输入:第一行是一个正整数,表示总金额(不大于1000)第二行是一个长度为n的正整数数组,表示礼品单价(n不大于100)第三行是一个长度为n的正整数数组,表示对...原创 2019-06-12 11:55:12 · 633 阅读 · 0 评论 -
后缀表达式计算和逆波兰式
一.根据中缀表达式计算后缀表达式https://blog.csdn.net/lcl497049972/article/details/83061274中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低...原创 2019-06-26 17:39:59 · 884 阅读 · 0 评论 -
总结:java中一些常用类的方法
一、java.lang1. Character类(1)public int compareTo(CharacteranotherCharacter)根据数字比较两个Character对象。 返回:如果该Character等于此Character,则返回0;如果该Character的数值小于参数Character,则返回小于0的值; ...原创 2019-07-11 21:21:57 · 337 阅读 · 0 评论 -
java中HashMap的遍历方法
转:https://blog.csdn.net/gary0917/article/details/79783713一、使用迭代器第一种:效率高 Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Ma...转载 2019-07-11 21:40:34 · 1378 阅读 · 0 评论 -
拼多多-笔试题(拓补排序)
m, n = input().split()cost = input().split()m, n = int(m), int(n)cost =[int(each) for each in cost]degree = {}depend = {}for i in range(len(cost)): degree[i+1] = 0while n: n-=1 re...原创 2019-07-28 17:29:23 · 826 阅读 · 0 评论 -
python 笔试题的输入输出
n = int(input())a = []b = []c = []for i in range(n): A, B, C = map(int, input().split()) a.append(A) b.append(B) c.append(C)1.普通输入##输入一行2 3a = input().split()print(a) ##[...转载 2019-08-10 23:42:04 · 6479 阅读 · 1 评论 -
网易互娱笔试题-二进制下的1的个数分类
题目描述:给定N个非负整数,将这N个数字按二进制下的1的个数分类,二进制下1的个数相同属于同一类,求最后共有几类数字。输入:1 有几组数5 每一组数有几个数8 3 5 7 2 每组数下的数输出:3实现(python):定义一个函数可以返回一个数二进制下1的个数,遍历数组,就可以返回这组数下的所有二进制的个数,最后按个数进行分组。def count(nu...原创 2019-08-12 09:44:06 · 451 阅读 · 0 评论 -
网易互娱笔试题-t时刻泳池的水量
题目描述:游泳池,一个进水管和一个排水管,开始开关都是打开状态,分别每度过t1, t2 时间改变开关的状态,开关打开时分别每分钟排入,排出 m1,m2 的水量。当进水管和排水管同时打开时,游泳池水量变化为每分钟m1-m2,游泳池的水量不能为负数,最大容量为m,水量不能超过m。计算 t 时刻泳池的水量。输入:5 有几组数10 2 1 5 2 5 每一组数10 2 10 5 ...原创 2019-08-12 10:41:30 · 716 阅读 · 0 评论 -
leetcode:两数之和-三数之和-四数之和系列之KSum的总结
leetcode 1 :Two Sum(返回索引)Given an array of integers, returnindicesof the two numbers such that they add up to a specific target.You may assume that each input would haveexactlyone solution, an...原创 2019-04-09 17:28:24 · 908 阅读 · 1 评论 -
面试题-乱序数组中寻找三数之和
题目描述:从一个乱序数组中寻找三数之和,数组中可能存在多对满足条件的数对,数组中没有重复的数。解题思路:本题是leetcode中3Sum的变形,不过相对来说是变简单了,因为去掉了其中重复的数。https://mp.csdn.net/postedit/89155613步骤:1.对数组进行排序;2.对排序后的数组从前往后遍历,每遍历到一个元素时,固定住这个数,从后面寻找两数...原创 2019-04-14 16:17:50 · 1117 阅读 · 0 评论 -
笔试题-剪绳子
题目描述:有N根绳子,第i根的长度为Li,现在需要M根等长的绳子,你可以对M根等长的绳子进行任意的裁剪(不能拼接),帮忙计算这m个绳子最长的是多少?输入描述:第一行为两个整数,N,M,表示N根原始的绳子和最终需要的M根绳子数,其中1<=N,M<=100000,0<Li<1000000000输出描述:对每个测试用例,输出一个数字,表示裁剪后的最长的长度...原创 2019-03-16 12:55:39 · 617 阅读 · 0 评论 -
笔试题:最后一个出列的人背上的编号
最后一次出列的人,背上的编号是多少?10000个人背上依次贴着从1到10000的编号,他们从小到大依次报数,偶数出列,一圈后,从剩下的5000人再次从号码小的开始报数,偶数出列,直到没人出列为止。问最后一次出列的人,背上的编号是多少?答:首先答案肯定为奇数,其次1永远不可能出列第一次出列 为2,4,6,8.....第二次出列为3,4,11.....第三次出列为5,13........原创 2019-03-16 18:34:58 · 1596 阅读 · 1 评论 -
2019-百度算法岗笔试题(1)
描述给定一个仅由小写字母组成的长度不超过1e6的字符串,将首字母移动到末尾并记录所得的字符串,不断重复操作,虽然记录了无限个字符串,但其中不同的字符串数目是有限的,问不同的字符串有多少个?输入:abab输出2解释:记录了 abab 和 baba两个不同的字符串思路:用到的思想:Kmp求最小循环节KMP最小循环节、循环周期:定理:假设S的长度为len,则S存在最小循...原创 2019-04-03 22:56:48 · 2112 阅读 · 0 评论 -
二叉树的前中后遍历方式(递归+迭代)
参考:https://blog.csdn.net/xiaoxiaxiaen/article/details/747457471.前序遍历:递归版:public void preOrder(TreeNode root){ if(root==null) return; System.out.print(root.val+" "); preOrder(root.left); ...原创 2019-03-31 00:32:47 · 149 阅读 · 0 评论 -
java:键盘输入
1.未知数组长度逗号分隔的键盘输入两个变量的输入:Scanner sc=new Scanner(System.in);String line=sc.nextLine().trim();String[] array=line.split(",");int n=Integer.parseInt(array[0]);int k=Integer.parseInt(array[1]...原创 2019-04-07 12:36:57 · 720 阅读 · 0 评论 -
网易雷火笔试-编程题(1)
题目描述:给定一个数组tree和两个节点p,q,计算最低公共祖先的值。输入:一个数组和两个节点值输出:计算最低公共祖先的值如:输入:1,2,3,4,5,6,7,-1,-1,8,943输出:1思路:最低公共祖先的题目肯定会求,本题麻烦就在于要把输入的数组转换成二叉树,另外两个值转换成二叉树中的节点值。import java.util.LinkedLi...原创 2019-04-07 18:37:10 · 2346 阅读 · 0 评论 -
笔试题:二进制计数
题目描述:给定一个正整数N,在[0,N]统计有几个满足:其二进制表示不包括连续的1.其中,1<=N<=10的9次方输入描述:一个正整数N输出描述:一个正整数如:输入8 输出6……...原创 2019-04-07 18:39:43 · 403 阅读 · 0 评论 -
面试题-字符串分类
字符串分类牛牛有N个字符串,他想将这些字符串分类,他认为两个字符串A和B属于同一类需要满足以下条件:A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。现在牛牛想知道这N个字符串可以分成几类。输入描述首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串,每个字符串长度不超过50。输出描述输出一个...原创 2019-04-11 11:05:28 · 844 阅读 · 0 评论 -
面试题-lintcode 42 最大子数组II
题目描述:给定数组,找出两个不重叠子数组使它们的和最大。每个子数组的数字在数组中的位置应该是连续的,返回最大的和。注意事项:子数组最少包含一个数,要求时间复杂度为o(n).example:给出子数组[1,3,-1,2,-1,2],这两个子数组分别为[1,3]和[2,-1,2]或者[1,3,-1,2]和[2],它们的和都是7.返回7.动态规划求解,思路同:https://b...原创 2019-04-02 12:16:12 · 1176 阅读 · 0 评论 -
笔试题-安排座位
题目描述安排座位:为N名学生安排座位,有M张桌子,每张桌子供一名同学单独使用,也可以供两名同学共同使用为所有学生评估淘气值,第i名学生的淘气值为A[i],同桌两人淘气值过高容易产生矛盾,如何安排座位,使得淘气值之和最大的两名同桌,其淘气值之和最小。* 输入:第一行 两个整数N,M 第二行:N个整数A1,An* 输出:淘气值之和最大的两名同桌,其淘气值之和可能的最小值**...原创 2019-04-02 15:16:31 · 2179 阅读 · 0 评论 -
笔试题:两个数组的最小乘积和
题目描述:输入两个数组,调整第一个数组的顺序,使得两个数组的乘机和最小。import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in)...原创 2019-04-02 15:18:32 · 1394 阅读 · 0 评论 -
笔试题:字母序最小的序列的第一张卡片上数字
题目描述:有52张卡片,大小写的a-z,随意抽任意张成一排,去重后,所有可能的结果中,字母序最小的序列的第一张卡片上是哪个字母?public class Main{ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scann...原创 2019-04-02 15:39:19 · 518 阅读 · 0 评论 -
朴素和KMP匹配算法(java)
转自:https://blog.csdn.net/scgaliguodong123_/article/details/49148017转载 2019-04-03 15:52:53 · 182 阅读 · 0 评论 -
kmp求最小循环节及其原理解释
转自:https://blog.csdn.net/qq_36561697/article/details/81844145KMP最小循环节、循环周期:定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len],子串为S[0…len-next[len]-1]。(1)如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,...转载 2019-04-03 16:40:39 · 508 阅读 · 0 评论 -
网易互娱笔试题-幸运N串
题目描述:连续N串被认为是幸运串,给一个全部由大写字母组成的字符串,允许改变最多两个大写字母(也允许不改变或改变1个大写字母),是的字符串中包含的最长的连续N串的长度最大。输入:T 表示有T组用例每一行用例包含一行大写字符串S(0<|S|<50000,|S|为字符串长度输出:每一个测试用例,输出一个整数,表示操作后包含的最长连续N串的长度比如:输入3NNGNN...原创 2019-08-12 11:58:25 · 1601 阅读 · 0 评论