面试-算法
Danny_姜
分享是一种精神, 你可以分享他人成果也可以将自己的成果分享给其他人, 不论哪一种分享, 都会有所收获
展开
-
面试算法--if语句中使用赋值语句
今天在讲课之余偶然发现java一个小问题,如下代码所示public class Test { public static void main(String[] args) { Boolean flag = false; if(flag = true) { System.out.println("True"); } else原创 2016-09-17 17:47:18 · 7061 阅读 · 1 评论 -
快速排序
简介:快速排序是一种利用分治思想的排序方法。它的最坏情况时间复杂度为O(n2)的排序算法。虽然最坏情况很差,但是快排通常是实际排序应用中最好的选择,因为它的平均性能非常好;它的期望时间复杂度是O(N * LogN),而且O(N * LogN)中隐含的常数因子非常小。另外它能够进行原址排序。基本思想通过一次 分区操作(Partition) 将需要排序的数据分割成独立的两部分,其中一部分的所有数...原创 2018-10-31 10:23:05 · 1196 阅读 · 0 评论 -
插入排序
算法思想插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,如下图所示:那插曲排序是如何借助上面提到的思想来实现排序的呢?首先我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一...原创 2018-10-24 17:05:13 · 18178 阅读 · 6 评论 -
数据结构--数组
定义数组(Array)是一种线性表结构,它用一组连续的内存空间来存储一组具有相同类型的数据。在这个定义中有几个关键词:线性表所谓线性表就是数据会排成像一条线一样的结构。也就是说线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表包括:顺序表和链表顺序表里面元素的地址是连续的,比如数组或者用数组实现的队列、栈等链表里面节点的地...原创 2018-11-06 14:05:51 · 627 阅读 · 0 评论 -
快速判断某一个数组是否是另一个数组的子集
给定两个无序数组:数组arr1[0…m-1] 和 数组arr2[0…n-1] ,判断数组arr2是否是arr1的子集。比如arr1[] = {11, 1, 13, 21, 3, 7}arr2[] = {11, 3, 7, 1}输出truearr1[] = {1, 2, 3, 4, 5, 6},arr2[] = {1, 2, 4}输出truearr1[] = {10, 5,...原创 2018-11-13 21:40:15 · 18211 阅读 · 2 评论 -
快速查找数组中“和”为X的两个数
快速判断在一个数组中,是否存在两个数字,让这两个数字之和等于一个给定的值 X。以数组 arr[] = {11, 15, 6, 8, 9, 10} 为例:当x = 16时, 存在两个数字的和为16: (6, 10) 输出: true当x = 35时, 存在两个数字的和为35: (26, 9) 输出: true当x = 45时, 不存在两个数字的和为45输出: false普通解法...原创 2018-11-11 21:29:10 · 3484 阅读 · 0 评论 -
单链表反转
给定一个链表的头结点(Head), 根据这个Head将链表进行反转比如如下几种情况:输入如下链表的头结点 :1->2->3->4->NULL则输出结果为 ::4->3->2->1->NULL输入如下链表的头结点:1->2->3->4-&翻译 2018-11-20 16:16:14 · 231 阅读 · 0 评论 -
数据结构--链表
简介同数组一样,链表也是一种线性结构。但是同数组不一样的是链表并不需要一组连续的内存空间来存储数据。取而代之的是,它通过“指针”将一组零散的内存串联起来,用一张图来体现链表和数组的区别如下:这样做的好处就是:可以动态的为链表申请所需要的内存举个例子,假设我们要申请一个100MB大小的数组,如果内存中没有连续的、足够大的存储空间时,几遍内存的剩余总空间大于100MB,仍然会申请失败;而链...原创 2018-11-18 13:49:42 · 517 阅读 · 0 评论 -
数据结构--队列
队列队列是一种同栈Stack非常类似的结构。唯一的不同点是:最先被压入栈的数据,将会在最后被弹出栈;而队列与之相反,最先进入队列的数据会被最先从队列中取出。这个非常好理解,比如我们在超市买东西的时候,需要排队结账。最先到达收银台的人会先结账。队列就是符合这种规律的一种数据结构:也就是我们常说的先进先出(FIFO)原则。基本操作我们已经知道,栈支持两种基本操作: 入栈(push)和出栈(po...原创 2018-12-02 13:50:33 · 517 阅读 · 0 评论 -
数据结构--栈
理解栈在理解"栈(Stack)"的时候,经常会用一个非常贴切的例子来理解它:就是一摞叠在一起的盘子。我们在放盘子的时候都是从下往上一个一个的放,反之在取盘子的时候都是从上往下一个一个的取出来。也就是说最先放进去的盘子在最后时刻才能被取出来。这就是我们常说的后进先出(LIFO)或者先进后出原则(FILO)。如下图所示:注意:正如装盘子的容器的容量是有限的, 一个栈的容量也是有限的,因此在往一...原创 2018-11-28 09:37:16 · 264 阅读 · 0 评论 -
数据结构--二叉树
1原创 2018-12-19 22:08:05 · 1745 阅读 · 2 评论 -
数据结构--树(Tree)的学习线路
不管是在面试时,还是日常开发过程中。树都是一种曝光率极高的一种数据结构。因此掌握树这项技能包对于开发工程师来说是必不可少的。但是树的种类很多,作为一个基本及格的工程师应该掌握哪些树,又该掌握到什么程度呢?我个人认为,对于树这种数据结构,只要掌握(最好是能信手拈来)以下几项就基本能够达到大部分的面试要求.什么是树知道树的定义,以及跟树相关的各个术语,比如根节点、叶子结点、树的高度等等。二...原创 2018-12-14 14:45:21 · 2197 阅读 · 0 评论 -
数据结构--树(Tree)
引入树(Tree)是一种非线性结构。其内部数据并不是以线性的方式存储在内存中,而是以一种层级的关系保存的内存当中。这种层级是什么意思呢? 举个例子,现实生活中其实有很多关系都是一层级的方式存在的。比较经典的有以下几种公司中的组织架构关系:家族族谱比赛的对阵表植物的根茎以上几种都是按照树形结构组织数据的绝好例子。树の定义接下来看一下在计算机科学中,树(Tree)是如何被定义...原创 2018-12-14 14:47:45 · 1419 阅读 · 0 评论 -
数据结构--二叉搜索树
上一节我们讲了二叉树的定义,以及二叉树的遍历,这是面试中经常会问到的问题。但是坦白讲,在我们日常开发工作中普通的二叉树与二叉树遍历被用到的机会其实并不是很高。为什么这么说呢? 解答这道问题之前我们先来看一道面试题:用一种数据结构将如下一组数据保存在内存中, 并提供元素查找操作64, 50, 79, 10, 71, 30, 9, 88假如我们使用完全二叉树来保存这组数据,则这棵树会是如下所...原创 2018-12-22 22:27:23 · 2125 阅读 · 5 评论 -
数据结构--红黑树
为什么要平衡在上一节中,我们了解了 二叉搜索树 具有较稳定和较高的插入搜索效率。但是在某些极端情况下, 它的效率也会退化到 链表 的地步。比如以上一堆数据,按照插入顺序的不同,所构建二叉搜索树的结构也会不一样,如下图所示:很明显图a的效率肯定比图b效率高, 我们可以总结为: 在具有相同结点个数的情况下,一棵二叉搜索树的高度越低,它的效率也就越高。因此我们需要做的就是,不管被插入...原创 2018-12-28 22:36:27 · 1398 阅读 · 2 评论 -
算法时间复杂度分析(一)
金庸武侠中描述一种武功招式的时候,经常会用到 “快、准、狠” 这3个字眼。同样,在计算机中我们衡量一种算法的执行效率的时候也会考量3个方面:“快、省、稳”。具体点来讲就是我们在实现某一种算法的时候,最终目的就是要求计算机(CPU)在最短的时间内,用最少的内存稳定的输出正确的结果。这一章节主要来理解 “快”,至于“省” 和 “稳”,我会在后续章节进行讲解。那如何来判断某一段代码运行的是否足够快呢...原创 2019-07-03 22:50:59 · 11591 阅读 · 4 评论 -
Java查找最大公约数
题目:写出算法,实现找出两个int数值的最大公约数代码实现如下:class GongYue { public static void main(String[] args) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int g = gongYue(原创 2017-01-11 15:16:30 · 1130 阅读 · 0 评论 -
使用SimpleAdapter时,支持的UI控件类型
Android中使用SimpleAdapter显示UI控件时,行布局中的控件可以是哪几种? 在SimpleAdapter的bindView方法中,可以看到以下代码 从红色框中可以看出支持三种类型的UI控件,也就是CompondButton、TextView、ImageView原创 2016-12-09 16:58:59 · 637 阅读 · 0 评论 -
面试算法--Android卡顿
【卡顿】(特指不流畅的动画或者画面)是APP开发中最为常见的性能问题表现。请结合你所熟悉的移动操作系统(Android、IOS或者WP),解释一下APP中卡顿的发生机理,并分别针对【界面切换卡顿】和【屏幕滑动卡顿】提出典型的优化思路针对以上问题,官方并没有一个完整的绝对正确的解释。正所谓仁者见仁智者见智。每个开发工程师都有自己的理解。以下是本人的对于Android发生卡顿几点拙见布局复杂,过渡绘制原创 2016-09-19 17:37:52 · 925 阅读 · 0 评论 -
Java进制相关的算法
题目:如果下列公式成立: 78 + 78 = 123,则使用的是 _ _ _ 进制表示的解答:假设是X进制, 则左边的78 + 78可以表示为 (7 * X + 8) * 2 右边的123可以表示为1 * X * X + 2 * X + 3因此左右两边的等式可以写成以下等式: (7 * X + 8) * 2 = 1 * X * X + 2 * X + 3 进而计算出X = 13.答案就是13原创 2016-09-19 17:46:54 · 1123 阅读 · 0 评论 -
==与.equals方法的比较区别
下列java程序输出结果为_ _ _. int i = 0; Integer j = new Integer(i); System.out.println(i == j); System.out.println(j.equals(i)); String str1 = "123"; String str2 = n原创 2016-09-19 18:04:19 · 698 阅读 · 0 评论 -
面试算法--等差数列求和
将1,2,3,…99,100任意列成一个圈,相邻两个数的差的绝对值求和最多为_ _ _.答: 5000取最大值的情况就是按照下列排列方式 1, 100, 2, 99, 3, 98, …49, 52, 50, 51因为是围绕成一个圈,因此51后面应该再跟上 1 也就是说求和的最大值为99 + 98 + 97 + … + 3 + 2 + 1 + 50,得出5000原创 2016-09-19 22:49:15 · 2363 阅读 · 0 评论 -
面试算法--二位数组的计算
设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。答:i的值到8, j的值到10 也就是说这个二位数组是一个8行10列的二位数组, 具体内部的格局如下图所示 但是由于是以列为主存放,因此填充顺序是一列一列的填充,对应的for循环如下:for(int j = 1; i <=原创 2016-09-24 17:39:41 · 1005 阅读 · 0 评论 -
关于OkHttp方面的Android面试题
最近好多学生出去面试都或多或少的问到了一些三方网络框架的使用以及内部实现原理。对于三方框架的使用自然不用多说 手到擒来。但是每每问到内部实现原理时就相形见绌了。因此最近专门花了点时间准备写几篇对于网络请求框架的分析博客供学生们参考。就拿OkHttp开刀吧首先鄙人总结了一下关于OkHttp方面都有可能问到那些问题:如何使用OkHttp进行异步网络请求,并根据请求结果刷新UI可否介绍一下OkHttp原创 2016-11-17 16:06:57 · 10161 阅读 · 2 评论 -
OkHttp面试之--使用OkHttp异步请求网络数据
对于OkHttp的使用,就不多废话了,直接上代码//首先创建一个Handlerprivate Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) {原创 2016-11-17 16:23:53 · 3815 阅读 · 6 评论 -
OkHttp面试之--OkHttp的整个异步请求流程
通过上一节,我们已经了解了如何使用OkHttp发送异步请求,下载网络图片信息并显示到ImageView控件上,从这一节开始我们就来开始研究一下其内部的实现流程和原理。因为整个流程相对而言还是比较复杂,因此对于流程的分析我划分成以下几个章节去介绍流程概述拦截器的原理HttpEngine中sendRequest的流程分析HttpEngine中readResponse的流程分析这一节我们先来看一原创 2016-11-17 19:29:58 · 11518 阅读 · 0 评论 -
OkHttp面试之--HttpEngine中的sendRequest方法详解
上一节我们介绍了OkHttp网络异步请求的整个流程。其中在流程的最后阶段,我们发现最终创建了HttpEngine对象,并分别调用的此对象的sendRequest和readResponse方法。这两个方法 分别有它相应的作用。这一节我们着重来分析sendRequest流程。以下是sendRequest的整个方法中的内容:public void sendRequest() throws RequestE原创 2016-11-17 22:52:35 · 8296 阅读 · 0 评论 -
OkHttp面试之--HttpEngine中的readResponse流程简介
上一节主要大体看了一下sendRequest的流程,本节来看一下当请求发送出去之后,是如果读取请求体中的数据的,具体的代码都在HttpEngine.readResponse方法中,代码如下:public void readResponse() throws IOException { if (userResponse != null) { return; // Already r原创 2016-11-18 11:54:18 · 4086 阅读 · 0 评论 -
面试算法--KMP字符串查询算法
题目:假设有一个主字符串S,以及一个子字符串P。请写出一个算法,解决在S中是否包含P,如果存在返回P在S中的位置,否则返回-1. 比如:主串为 “ABCDEFJIOH”,子串为“DEF”。 则返回结果为 3。针对上面的题目,我们通常能想到的方法就是定义两个int变量i和j来分别指示S和P的下标。然后依次的遍历。如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符原创 2016-12-11 17:08:34 · 861 阅读 · 0 评论 -
OkHttp和HttpUrlConnection以及Volley的区别
虽然这三个都是可以用来访问网络的,但是还是不同的。我们最熟悉的肯定是HttpUrlConnection,这是google官方提供的用来访问网络,但是HttpUrlConnection实现的比较简单,只支持1.0/1.1,并没有上面讲的多路复用,如果碰到app大量网络请求的时候,性能比较差,而且HttpUrlConnection底层也是用Socket来实现的。而Volley是一个开源库,它只是封装了访原创 2016-11-19 21:41:56 · 6603 阅读 · 2 评论 -
HTTP 1.1与HTTP 1.0的比较
此文转自:http://blog.csdn.net/elifefly/article/details/3964766/HTTP 1.1与HTTP 1.0的比较 一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过转载 2016-11-19 21:44:04 · 873 阅读 · 0 评论 -
Http2.0那点事
此文转自:http://www.open-open.com/lib/view/open1455796649605.html 在我们所处的互联网世界中,HTTP协议算得上是使用最广泛的网络协议。最近http2.0的诞生使得它再次互联网技术圈关注的焦点。任何事物的消退和新生都有其背后推动的力量。对于HTTP来说,这力量复杂来说是各种技术细节的演进,简单来说是用户体验和感知的进化。用户总是希望网络上的信转载 2016-11-19 21:45:02 · 1290 阅读 · 0 评论 -
Socket的使用
此文转自:http://blog.csdn.net/semillon/article/details/7515926在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据. 这篇文章首先介绍Socket类转载 2016-11-19 21:46:22 · 1160 阅读 · 0 评论 -
OkHttp解析大总结
先来看一下Request这个类,此类还是比较简单的,没有太多复杂的代码,内部就是对一些url、method、body等变量的封装。在整个OkHttp的网络请求流程中有一大部分的代码就是用来对这几个变量进行二次修改。源码如下: 接着再来看Call这个类,在 OkHttp面试之–OkHttp的整个异步请求流程这一节中我们了解到真正的Call对象应该是RealCall类型,那我们就来看一下这个RealC原创 2016-11-19 14:06:33 · 5075 阅读 · 0 评论 -
提升算法数据结构的几个网站
与同事之间的一段对话,搞得我的小心脏又是扑通扑通的。最起码证明自己坚持在算法这条路上还是有意义的。平复心情,决定还是写一篇我自己感觉比较好用的几个提升算法技能网站,也当做是做一下自我总结。学习算法可能会遇到的障碍有时候我们自认为对一些理论知识已经掌握的足够扎实。比如说链表。相信大多数开发人员对于链表结构不会陌生;对于链表的工作机制了然于心,链表各种操作的时间复杂度也能做到侃侃而谈;甚至...原创 2019-08-28 22:03:40 · 731 阅读 · 0 评论