传送门Given an integer array nums, return an integer array counts where counts[i] is the number of smaller elements to the right of nums[i].这是一个 Hard 级别的题,描述很简单,暴力解法也比较容易想出来:遍历数组,针对每个元素,遍历它后面的元素得出小于它的...
传送门Given an integer array nums, return an integer array counts where counts[i] is the number of smaller elements to the right of nums[i].这是一个 Hard 级别的题,描述很简单,暴力解法也比较容易想出来:遍历数组,针对每个元素,遍历它后面的元素得出小于它的...
传统 IO 相比各位已经比较熟悉,今天就只了解一下后面两套 API。NIONIO 并不是一个好用的 API,实际工作中用的比较少,对于 Android 开发者来说用的就更少了。只做了解。NIO 以非阻塞式出名,但事实是 NIO 的非阻塞式仅支持网络 IO,并且默认仍是阻塞的。对于文件 IO 仅支持阻塞模式。缓冲模型NIO 以 Channel 为模型,与 Stream 不同,Channel 是...
三大基本操作的细节clone大家都知道 git clone 命令是把一份远程的仓库拷贝到本地。具体来讲,clone 操作大致分为三个步骤。假设当前远程仓库有三个提交,两个分支:那么 clone 流程如下:拷贝分支、分支在远程的镜像(即 origin/*)。以及 HEAD 指针和它的远程镜像。拷贝这些引用所指向的提交。拷贝父提交。push和 clone 一样,push 也分为几个步骤执行。假设...
什么是泛型泛型本质上是一个确保类型安全的手段,它属于那种没有也罢有则更佳的特性。泛型几乎没有扩展 Java 能力的边界,而是提高了编码效率与可维护性,减少模板代码并降低出错机率。这么说的原因是使用 Object 就可以传递任意数据,没有必要使用泛型。所有写 Java 的人都离不开泛型,比如 List<String> 但主动写一个泛型类的人就不多了,其中一个原因是对泛型的能力缺乏清...
什么是线程一个非常古老,但好多人都没有明确答案的问题:进程、CPU 线程、操作系统线程 有什么区别?[进程]进程是操作系统为程序开辟的一块独立的,隔离的内存空间。科班出身的同学应该了解过 Linux Process Address Space,对于一个程序来说,它可以视为自己独享全部内存。至于这些内存与实际物理内存的映射,是操作系统管理的。进程是操作系统资源分配的最小单位。一个进程就像一个家...
基础ConstraintLayout 旨在代替 RelativeLayout,但实际上不能简单地理解为加强版的相对布局,因为它加强的太多了...ConstraintLayout 主要优点如下:提供强大的布局属性,几乎可以实现任何布局。扁平化布局。大幅提高测量性能。因为扁平化布局,所以便于实现 View 之间的过渡动画。当然,也不是没有缺点:性能比 LinearLayout / FrameLa...
OnDragListenerOnDragListener 是 Android framework 提供的 API,不需要引用额外的库。它有几个默认的特性:拖动时原始 View 照常在原位置显示。拖动时会有一个半透明的浮层,全局置顶,甚至可以覆盖系统 UI(比如导航栏)。与 OnDragListener 配套的是 View.startDrag() 方法或 ViewCompat.startDra...
当我们感觉局部最优可以推出全局最优,一时找不到反例时就可以使用贪心算法。所谓「贪心」就是只在眼下找到最好的方法。贪心算法相对比较抽象,不像滑动窗口那么好识别有套路。局部最优有很多种表现形式:例如先处理一部分元素,再处理其他部分。或者先从一个维度处理全部元素,再从另一个维度处理。不要把「局部」狭义地理解成「一部分元素」。一般来说贪心算法需要先进行某种形式的排序,因为只有在有序序列中才可能找到局...