1 | 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。 |
排序贪心
1 | class Solution { |
1 | 给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。 |
排序贪心
1 | class Solution { |
1 | 给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。 |
1 | class Solution { |
1 | 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。 |
使用哈希表存储A和B二重循环相加的结果值和数量的结果对(sum,count),然后再用二重循环计算C和D相加的结果值,判断该值的负数是否在哈希表里面存在,如果存在则对哈希值计数
1 | class Solution { |
1 |
|
参考文献
1 | 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 |
1 | class Solution { |
1 | 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 |
使用基数排序
1 | class Solution { |
基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献[1]。
它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。
基数排序的时间复杂度是O(kn),其中n是排序元素个数,k是数字位数。
步骤一、LSD的排序方式由键值的最右边开始,首先根据最低位的数字进行桶排序,得到一个顺序
步骤二、然后按照第一次排序的顺序将每个数字放回原来的数组
步骤三、对第二位继续执行步骤一二,直至所有的数字的最高位被桶排序
1 | public class RadixSort |
1 | 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 |
给定的是无序的,先划分,一部分是有序的进行二分查找,一部分是无序的继续划分
1 | class Solution { |
不划分方法
1 | class Solution { |
参考文献
1 | public static int binarySearch(int[] arr, int start, int end, int target) { |
当查询左边界的时候:lower
设置为true
当查询右边界的时候:lower
设置为false
(注意,查询的index
要减去1
)
1 | public int binarySearch(int[] nums, int target, boolean lower) { |
1 | 给你一个字符串 s ,请你根据下面的算法重新构造字符串: |
1 | class Solution { |
1 | 给出一个完全二叉树,求出该树的节点个数。 |
规定根节点位于第 $0$ 层,完全二叉树的最大层数为 $h$ 。根据完全二叉树的特性可知,完全二叉树的最左边的节点一定位于最底层,因此从根节点出发,每次访问左子节点,直到遇到叶子节点,该叶子节点即为完全二叉树的最左边的节点,经过的路径长度即为最大层数 $h$。
当 $0 \le i < h$ 时,第 $i$ 层包含 $2^i$ 个节点,最底层包含的节点数最少为 $1$,最多为 $2^h$ 。
当最底层(叶子节点所在层)包含 $1$ 个节点时,完全二叉树的节点个数是
$\sum_{i=0}^{h-1} 2^{i}+1=2^{h}$
当最底层包含 $2^h$个节点时,完全二叉树的节点个数是
$\sum_{i=0}^{h} 2^{i}=2^{h+1}-1$
如何判断第 $k$ 个节点是否存在呢?如果第 $k$ 个节点位于第 $h$ 层,则 kk 的二进制表示包含 $h+1$ 位,其中最高位是 $1$,其余各位从高到低表示从根节点到第 $k$ 个节点的路径,$0$ 表示移动到左子节点,$1$ 表示移动到右子节点。通过位运算得到第 $k$ 个节点对应的路径,判断该路径对应的节点是否存在,即可判断第 $k$ 个节点是否存在。
1 | class Solution { |
参考文献
1 | 作者:LeetCode-Solution |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true