09 二分法的认识和例题若干


二分法是一种基础的算法策略,通常又叫二分查找,一般用于查找一个有序数组中的某个值的位置或者给定的特定值的插入位置,复杂度为O(logN)。一般而言,二分法的思路很简单,无非就是每次根据中值判断,然后缩减区间到原来的一半。 事实上,有序并不是使用二分的必要条件,只要能正确构建左右两侧的淘汰逻辑,就可以使用二分。关于这种情况,下面的例题中会有所提及。

08 对数器的认识


在做算法题的过程中,我们往往会碰到一种情况:你从公众号或者某个地方看到一道算法题,于是动手实现了这道题的解法,但是由于没有提供这道题的评测系统,你不知道自己做得对不对。这个时候,也许对数器就能派上用场了。

07 三种简单排序总结


常见的排序算法有三种最简单的,分别是选择排序、冒泡排序和插入排序,在此做个小小总结。

06 Math.random()方法的奇技淫巧(下)


给定一个方法f(),以固定概率但不是等概率返回0和1。现在要求实现方法g(),等概率返回0和1。

05 Math.random()方法的奇技淫巧(中)


给定一个方法f(),它可以等概率返回[1,5]范围内的整数。现在规定,方法f()是你唯一可以借助的随机机制(Math.random()之类的随机机制都不能用)。在此基础上编写相关方法,使得[1,7]范围内的整数等概率返回。

04 Math.random()方法的奇技淫巧 (上)


众所周知,Math.random()方法可以以double类型等概率返回[0,1)上的小数。也就是说,如果x是[0,1)范围内的小数,那么[0,x)上的数出现的概率是x。现在提出一个要求:如果x是[0,1)范围内的小数,那么[0,x)上的数出现的概率调整为x^2。

03 数组区间求和问题


数组区间求和问题,也称为前缀和问题,是一个常见的算法问题。解决这个问题一般有两种思路,分别是利用二维数组建表和利用一维前缀和数组。在不同的需求下这两种思路各有优点,所以本文对这两种思路总结一下。

02 超简单的阶乘和问题


新手在学习递归的时候会碰到一个经典的问题,就是求阶乘或者阶乘的和,例如:给定一个int类型的数N,返回1!+2!+3!+...+N!的结果。但是大家也知道当递归深度较大时,时间空间开销可能会很大,导致程序的性能下降,所以本文总结一下不用递归的方法。

01 打印整型的二进制格式


如何打印一个整型的二进制格式?众所周知,Java中int类型的数在底层按4个字节存储,也就是32位,所以一个int类型数值的二进制格式有32位,我们要做的就是确定每一位的数值并打印出来。

01 记一次服务器防护经历


最近买了一台阿里云的轻量应用服务器来搭建自己的博客网站,今天连上服务器准备继续折腾时突然看到提示:Last failed login: Mon Jul 31 14:10:34 CST 2023 from 62.234.8.60 on ssh:notty There were 7 failed login attempts since the last successful login.