zfman / AlgorithmCode

本仓库整理了LeetCode和剑指offer上的算法题目以及参考代码

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

AlgorithmCode

该仓库收集一些算法的答案,目标是整理一套系统的算法参考答案以供其他学习者参考

我也在慢慢的学算法并且在坚持刷题,我会不定期的上传新的题目,希望大家共同努力!

在线编程网站:

目录

排序算法

算法 稳定 时间复杂度 空间复杂度 备注
选择排序 no N2 1
冒泡排序 yes N2 1
插入排序 yes N ~ N2 1 时间复杂度和初始顺序有关
希尔排序 no N 的若干倍乘于递增序列的长度 1
快速排序 no NlogN logN
三向切分快速排序 no N ~ NlogN logN 适用于有大量重复主键
归并排序 yes NlogN N
堆排序 no NlogN 1

快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 ~cNlogN,这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分快速排序,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。

LeetCode

1-100

101-200

201-300

301-400

401-500

501_600

601-700

701-800

801_900

剑指offer

码赛

笔试真题

其他练习

面试感受

腾讯

初面过了,复试挂了!

一轮的时候氛围很轻松,我没有回答上来的会有提示,说的不正确的地方面试官会把他的理解说下,大致的问题有:

  • 设计模式中的单例如何实现线程安全?几种方法?
  • gc?
  • 三次握手?为什么需要三次?
  • 四次挥手?为什么需要四次?为什么要等待2MSL?
  • 应用层协议?
  • OSI五层协议有哪些?

还要很多很多,但是我已经想不起来了,初面在一个半小时以上(我应该是最后一个,下午6点半才面完),中间写了两道题目:

1.一个题是给你一个字符串数组,如["1","3","30","7"]组成的最大的数是多少,示例输出为73301? 这道题可以使用排序的思路来做,但是比较的规则有所变化,假设要比较3和30的大小,那么直接比较330和303的大小,330>303,那么以本题的规则就是3>30

2.第二题是给你整形数组{1,2,3,4,5,6},还有一个右移位数n=3,返回一个右移之后的数组,数组个数用m表示,示例输出[4,5,6,1,2,3],要求时间复杂度和占用的空间最小并说明占用空间大小? 最笨的方法就是循环n次,然后每次移动一位,时间复杂度为O(nm);好一点的方法:首先将数组完全反转,此时为6 5 4 3 2 1,然后对前n位再次反转,后面的不变,此时为4 5 6 3 2 1,然后对第n位之后的全部进行反转,即为4 5 6 1 2 3。,时间复杂度0(3m)

复试问题很少,如下:

会C或者C++吗?

学过C语言,但是不太熟悉,常用的是Java(os:我报的是Android岗位呀)

问题没了,问的就这一个,然后下边开始做题

第1题是Java题目,写出输出结果,考察的知识点是try、catch、finally

第2题还是写输出结果,考察的知识点是继承、静态代码块加载顺序问题,形如:

Child child=new Child();
Parent parent=new Child();

第3题是手写算法,给定一个数组,元素都是整型,然后给定一个S,输出三个数相加之和与S最接近的那三个数在原数组中的索引,然后就没有然后了...

总结来说,复试主要考察的是算法,所以挂了也是必然的,以后要继续加强对算法的强化

同花顺

因为我的项目中用到了长连接,所以面试官就以此为入口开始问问题了:

  • 长连接和短连接?
  • 三次握手?
  • 长连接是在Service服务中建立的吗?
  • Service保活问题?
  • 项目中有没有用过push?
  • 快速排序的**?

大致说来就是先找切分点,然后对切分点左侧继续这个步骤,右侧继续这个步骤 寻找切分点:将第1个元素设为基准,j从后往前查找比基准小的数,i从前(第2个元素开始)往后查找比基准大的位置,找到之后两者交换,交换之后继续此步骤,直到i>j时停止,将j位置元素和基准交换,返回切分点j

  • Looper原理?
  • 课表控件原理?
  • java中gc回收原理?
  • 自定义View的过程?

神策数据

  • 线程池相关?
  • Android如何配置进程?
  • ButterKnife原理?
  • Android中怎么执行异步任务?
  • 项目中用过多线程吗?
  • 如何保证界面跳转过程中不出现回退很多下才会退出的问题?(其实问的就是LaunchMode的问题)
  • 加载模式有几种?
  • 课表控件原理?
  • 集合有哪几类?List和Set的区别?LinkedList和ArrayList的区别?
  • 根据项目来说明IO的运用?

总结来看,神策的面试官基本上把简历上写的东西都问了,我写了多进程、多线程、同步、异步,所以简历上写的东西一定要全部过一遍

同花顺

技术复试:

  • socket长连接、心跳保持
  • jni
  • 代码混淆
  • Android调试工具
  • JVM和DVM的区别
  • eclipse和Android Studio的区别
  • 使用原生写的软件越来越少,你的看法?
  • 网络请求框架

Hr面试:

  • 个人优缺点
  • 如何统计西湖中有多少条鱼
  • 最值得骄傲的一件事
  • 说下对我们公司的了解
  • 你是以什么样的标准来选择工作的?优先考虑哪方面?
  • 你还有什么想问的吗?

About

本仓库整理了LeetCode和剑指offer上的算法题目以及参考代码


Languages

Language:Java 100.0%