
算法笔记(java语言实现)
QiuGuoJing
热爱研究计算机算法
展开
-
(剑指offer)二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:1.暴力解法:因为每一行是从大到小,所以在遍历每一行时,可以使用折半查找。平均复杂度为O(nlogm)2.简单解法:我们先分析题目,把二维数组在纸上画成一个矩形。列如:1 2...原创 2019-12-20 04:48:49 · 222 阅读 · 0 评论 -
(赛码编程)喷水装置
题目描述:小赛家有一块草坪,长为20米,宽为2米,妈妈要他给草坪浇水,在草坪上放置半径为Ri的喷水装置,每个喷水装置可以给以它为中心的半径为实数Ri(1<Ri<15)的圆形区域浇水。他家有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润。你能帮他计算一下,把整个草坪全部湿润,最少需要几个喷水装置。输入:输入第一个数字为喷水装置的个数n,后面n个数字分别为n个喷水装置的半径r,...原创 2019-03-18 22:06:45 · 626 阅读 · 0 评论 -
(赛码编程)博弈问题
题目描述小赛是一名聪明的程序员。他的聪明确保他一定会应聘成功^_^~在应聘会上,人事主管向小赛提出了这样一个问题—— 这次招聘的规则是这样的:一共有n个人(n>1)参加应聘。人事主管事先选好了一个正整数x,他会把自己选的这个数x告诉前来应聘的每一个人。每个人(包括小赛)都可以选择1~m中的任意一个实数(就不要问实数是怎么选的啦2333)。参加应聘的人都不会知道其他人选择了...原创 2019-03-21 23:26:41 · 735 阅读 · 2 评论 -
(赛码编程)路灯
题目描述V先生有一天工作到很晚,回家的时候要穿过一条长l的笔直的街道,这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。路灯发光能力以正数d来衡量,其中d表示路灯能够照亮的街道上的点与路灯的最远距离,所有路灯发光能力相同。为了让V先生看清回家的路,路灯必须照亮整条街道,又为了节省电力希望找到最小的d是多少?输入:输入两行数据,第一行是两个整数:路灯数目n (1≤n≤...原创 2019-03-18 12:41:12 · 458 阅读 · 0 评论 -
(赛码编程) 字符判断
题目描述 判断字符串b的所有字符是否都在字符串a中出现过,a、b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少重复相同的次数。汉字使用gbk编码(简单的说,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。int is_include(char*a,char*b);返回0表示没有都出现过,返回1表示都出现过。请设计一个算法。...原创 2019-03-16 22:38:22 · 594 阅读 · 0 评论 -
java的Map接口方法(持续更新中)
1.Map.getOrDefault(K, V)检查一个map中匹配提供键K的值是否找到,没找到匹配的K就使用一个默认值V.2.Map.putIfAbsent(K,V)put与putIfAbsent区别:put在放入数据时,如果放入数据的key已经存在与Map中,最后放入的数据会覆盖之前存在的数据,而putIfAbsent在放入数据时,如果存在重复的key,那么putIfAbs...原创 2019-03-16 14:52:02 · 343 阅读 · 0 评论 -
(算法优化) 栈和队列(5)--用一个栈实现另一个栈的排序
题目:一个栈元素的类型为整数,现在要想将该栈从顶到底按从大到小的顺序排列,只允许申请一个栈,除此之外,可以申请一个变量,可以申请额外的变量,但是不能申请额外的数据结构,如何完成排序?解析:这道题的思路太简单了,设置两个栈stack和help,用一个中间变量存取stack每次弹出的元素temp,用temp和help的栈顶元素比较,当temp更大的时候,将help中的元素全部加入sta...原创 2018-09-30 10:12:42 · 212 阅读 · 0 评论 -
(算法优化) 栈和队列(3)--如何仅用递归函数和栈操作逆序一个栈
题目:一个栈一次压入了1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。 思路解析:由于要使用递归函数,我们很容易可以想到:如果有一个函数A,可以先帮我们把栈底的元素取出来,再使用递归函数B逆转剩下的栈(即已经移除栈底元素的栈),假设剩下的栈已经逆转完毕...原创 2018-09-29 22:31:31 · 276 阅读 · 0 评论 -
(算法优化) 栈和队列(2)--由两个栈组成的队列
题目: 编写一个类,用两个栈来实现队列,支持队列的基本操作(add,poll,peak). 解析: 用两个栈,一个作为压入栈,压入数据时只往这个栈压入,记为stackPush;另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为stackPop。如图所示:操作必须注意以下两点: 1.如果stackPush要往stackPop压入数据,那么必须一次性把stackPush中数据全部压入。...原创 2018-09-28 14:28:26 · 264 阅读 · 0 评论 -
(算法优化) 栈和队列(1)--设计一个有getMin功能的栈
题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。要求:1、pop、push、getMin操作的时间复杂度都是O(1) 2、设计的栈类型可以使用现成的栈结构解析:设置两个栈stackData和stackMin,stackData用来保存压入栈的元素,stackMin用来保存每一步的最小值。当压入stackData中的元素小于或等于stackMin的...原创 2018-09-28 13:56:34 · 316 阅读 · 0 评论 -
排序算法java实现
排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。下表给出了常见比较排序算法的性能:排序算法的稳定性是个很重要的特性。排序算法稳定性的简单形式化定义为:如果Ai = Aj,排序前Ai在A...原创 2018-09-13 00:35:31 · 207 阅读 · 0 评论 -
头条校招(今日头条2017秋招真题)
头条校招(今日头条2017秋招真题)题目描述 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件:a<= b<= cb ...原创 2018-07-06 23:46:40 · 2723 阅读 · 1 评论 -
对于JAVA中break关键字的作用范围
在算法练习时,我们常常会使用到循环语句,尤其有时候会嵌套使用很多层循环,在某些条件满足后我们又需要跳出循环,这时我们就需要用到break关键字了。以前我以为break是会跳出整个嵌套的循环,经过试验才发现break他只跳出一层循环!好了,废话少说,我们来看一段代码吧!代码如下:public class Test { public static void main(String[] args) {...原创 2018-03-19 23:35:52 · 4469 阅读 · 0 评论