自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 LeetCode广度优先与深度优先算法

经典题目 102.二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层序遍历结果: [ [3], [9,20], [15,7] ] 如果不需要确定当前遍历到了哪一层,(BFS)广度优先遍历模板如下。 while queue 不空: cur ...

2021-07-02 23:21:14 222 1

原创 LeetCode经典回溯算法

经典题目 39.组合总和 40. 组合总和 II 46. 全排列 47. 全排列 II 78. 子集 90. 子集 II 这类题目都是同一类型的,用回溯算法! 其实回溯算法关键在于:不合适就退回上一步 然后通过约束条件, 减少时间复杂度. 大家可以从下面的解法找出一点感觉! 39. 经典组合: 给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。 candidates中的数字...

2021-07-02 00:58:14 166

原创 八大排序之堆排序

堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序, 它的最坏, 最好, 平均时间复杂度均为 O(nlogn), 它也是不稳定排序。 堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆,注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 每个结点的值都小于或等于其左右孩子结点的值, 称为小顶堆 完全二叉树:一棵深度为 k 的有 n 个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为 i(1≤i

2021-06-30 00:00:40 238 1

原创 八大排序之基数排序

基数排序基本介绍 基数排序(radix sort) 属于“分配式排序” (distribution sort) , 又称“桶子法” (bucket sort) 或 bin sort, 顾名思义, 它是通过键值的各个位的值, 将要排序的元素分配至某些“桶” 中, 达到排序的作用 基数排序法是属于稳定性的排序, 基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是 1887 年赫尔曼· 何乐礼发明的。 它是这样实现的: 将整数按位数切割成不同的数字, 然后按每个

2021-06-28 23:57:55 209

原创 八大排序之归并排序

归并排序基本介绍 归并排序(MERGE-SORT) 是利用归并的思想实现的排序方法, 该算法采用经典的分治(divide-and-conquer)策略 分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起, 即分而治之 归并排序思想 分 --> 治 归并排序代码思路 合并时,其实是拿着原数组(arr)中两个相邻的子数组(arr1、arr2)进行合并,我们使用三个指针,来表示两个子数组在原数组中的位置

2021-06-27 17:20:29 65

原创 八大排序之快速排序

快排简介 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 快速排序又是一种分而治之思想在排序算法上的典型应用。本质上..

2021-06-26 23:34:27 79

原创 八大排序之希尔排序

希尔排序基本介绍 希尔排序是希尔(Donald Shell) 于 1959 年提出的一种排序算法。 希尔排序也是一种插入排序, 它是简单插入排序经过改进之后的一个更高效的版本, 也称为缩小增量排序。 希尔排序基本思想 希尔排序按照增量将数组进行分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止. 希尔排序图解(交换法) 第一次:gap = arr.length/5 = 5 , 将数组分为五组,每个数组元素的

2021-06-26 22:17:25 196

原创 八大排序之插入排序

插入排序基本介绍 插入式排序属于内部排序法, 是对于欲排序的元素以插入的方式找寻该元素的适当位置, 以达到排序的目的。 插入排序思想 插入排序(Insertion Sorting) 的基本思想是: 把 n 个待排序的元素看成为一个有序表和一个无序表 开始时有序表中只包含一个元素, 无序表中包含有 n-1 个元素, 排序过程中每次从无序表中取出第一个元素, 把它的排序码依次与有序表元素的排序码进行比较, 将它插入到有序表中的适当位置, 使之成为新的有序表 插入排序图解 插入排序逻辑: 首先,

2021-06-24 20:57:25 184

原创 八大排序之选择排序

选择排序基本介绍 选择式排序也属于内部排序法, 是从欲排序的数据中, 按指定的规则选出某一元素, 再依规定交换位置后达到排序的目的。 选择排序思想 选择排序(select sorting) 也是一种简单的排序方法。 它的基本思想是(n 是数组大小): 第一次从 arr[0]~arr[n-1]中选取最小值,与 arr[0] 交换 第二次从 arr[1]~arr[n-1]中选取最小值, 与 arr[1] 交换 第三次从 arr[2]~arr[n-1]中选取最小值, 与 arr[2] 交换, ..

2021-06-23 23:09:37 127

原创 八大排序之冒泡排序

基本介绍 冒泡排序(Bubble Sorting) 的基本思想是: 通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值, 若发现逆序则交换, 使值较大的元素逐渐从前移向后部, 就象水底下的气泡一样逐渐向上冒。 优化:因为排序的过程中, 各元素不断接近自己的位置, 如果一趟比较下来没有进行过交换, 就说明序列有序, 因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。 从而减少不必要的比较。 (这里说的优化, 可以在冒泡排序写好后, 再进行) 冒泡排序图解 第一.

2021-06-22 23:27:19 82

原创 Zookeeper

1.Zookeeper概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。 Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生了变化,Zookeeper就负责通知已经在Zookeeper上注册的那些观察者做出相应的反应. Zookeeper = 文件系统 + 通知机制 2.应用场景 提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服..

2021-06-13 12:54:13 102

原创 hadoop 提交流程源码解析

hadoop 提交流程源码解析: boolean b = job.waitForCompletion(true); 从提交开始进入源码 <1>. if (state == JobState.DEFINE) { submit(); 提交方法 } 1>.connect(); 选择环境运行 * Provides a way to access information abou...

2021-05-29 16:56:05 90

原创 HDFS读写数据流程及图解和副本选择策略

HDFS写数据流程: (1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 (2)NameNode返回是否可以上传。 (3)客户端请求第一个 Block上传到哪几个DataNode服务器上。 (4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。 (5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后...

2021-05-29 16:36:40 743

原创 Hive企业级调优

Hive企业级调优: 1. 执行计划(Explain) 1)基本语法 EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query 2)案例实操 (1)查看下面这条语句的执行计划 hive (default)> explain select * from emp; hive (default)> explain select deptno, avg(sal) avg_sal from emp g...

2021-05-28 15:49:25 78

原创 Hive中的高级函数

一.空字段赋值 1)函数说明 NVL:给值为NULL的数据赋值,它的格式是NVL( value,default_value)。它的功能是如果value为NULL,则NVL函数返回default_value的值,否则返回value的值,如果两个参数都为NULL ,则返回NULL。 2)样例 select comm,nvl(comm,mqrid) from emp; 如果员工的comm为Null,则用领导的id来代替 二. CASE WHEN THEN ELSE ...

2021-05-28 13:30:07 963

原创 Hive常用函数及样例

常用日期函数 unix_timestamp:返回当前或指定时间的时间戳select unix_timestamp('2018/08/08 08-08-08','yyyy/MM/dd HH-mm-ss');-前面是日期后面是指,日期传进来的具体格式 from_unixtime:将时间戳转为日期格式select from_unixtime(1533715688);2018/08/08 08-08-08 current_dat...

2021-05-28 12:52:03 75

原创 Hadoop优化

1.MapReduce跑的慢的原因 1.计算机性能 CPU,内存,磁盘健康,网络 2.I/O操作优化 (1) 数据倾斜 (2) Map和Reduce数设置不合理 (3) Map运行时间太长,导致Reduce等待过久 (4) 小文件过多 (5) 大量的不可切片的超大压缩文件 (6) Spill次数过多 (7) Merge次数过多等 2.MapReduce优化方法 MapReduce优化方法主要从六个方面考虑: 数据输入, Map阶段, R...

2021-05-23 17:58:34 222 2

原创 LeetCode每日一练

LeetCode每日一练: 3.无重复字符的最长字符 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 思路: 我们可以在字符串前面定义两个辅助指针,start和end. 利用HashMap来摘取字符,以及对应的索引 end随着字符向下读而像后走,当遇到相同字符的时候,start就直接指到该字符下. end-start+1 就是字符串的长度...

2021-05-05 22:19:16 110

原创 LeetCode每日一练

LeetCode每日一练: 2.两数相加 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 思路: 链表相加,主要是考虑进位的问题,我们可以用引用一个carry来记录进位,再引用一个sum来记录两个链表单位的和 sum的真实值 = 链表1 + 链表2 + carry值 carry的取值 = sum ...

2021-05-04 14:59:52 115

原创 LeetCode每日一练

Leetcode每日一练: 1.两数之和: 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例2: 输入:nu...

2021-05-03 23:31:19 108

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除