- 博客(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 233 1
原创 LeetCode经典回溯算法
经典题目39.组合总和40. 组合总和 II46. 全排列47. 全排列 II78. 子集90. 子集 II这类题目都是同一类型的,用回溯算法!其实回溯算法关键在于:不合适就退回上一步然后通过约束条件, 减少时间复杂度.大家可以从下面的解法找出一点感觉!39. 经典组合:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字...
2021-07-02 00:58:14 178
原创 八大排序之堆排序
堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序, 它的最坏, 最好, 平均时间复杂度均为 O(nlogn), 它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆,注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值, 称为小顶堆完全二叉树:一棵深度为 k 的有 n 个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为 i(1≤i
2021-06-30 00:00:40 261 1
原创 八大排序之基数排序
基数排序基本介绍基数排序(radix sort) 属于“分配式排序” (distribution sort) , 又称“桶子法” (bucket sort) 或 bin sort, 顾名思义, 它是通过键值的各个位的值, 将要排序的元素分配至某些“桶” 中, 达到排序的作用基数排序法是属于稳定性的排序, 基数排序法的是效率高的稳定性排序法基数排序(Radix Sort)是桶排序的扩展基数排序是 1887 年赫尔曼· 何乐礼发明的。 它是这样实现的: 将整数按位数切割成不同的数字, 然后按每个
2021-06-28 23:57:55 220
原创 八大排序之归并排序
归并排序基本介绍归并排序(MERGE-SORT) 是利用归并的思想实现的排序方法, 该算法采用经典的分治(divide-and-conquer)策略分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起, 即分而治之归并排序思想分 --> 治归并排序代码思路合并时,其实是拿着原数组(arr)中两个相邻的子数组(arr1、arr2)进行合并,我们使用三个指针,来表示两个子数组在原数组中的位置
2021-06-27 17:20:29 77
原创 八大排序之快速排序
快排简介快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。本质上..
2021-06-26 23:34:27 91
原创 八大排序之希尔排序
希尔排序基本介绍希尔排序是希尔(Donald Shell) 于 1959 年提出的一种排序算法。 希尔排序也是一种插入排序, 它是简单插入排序经过改进之后的一个更高效的版本, 也称为缩小增量排序。希尔排序基本思想希尔排序按照增量将数组进行分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止.希尔排序图解(交换法)第一次:gap = arr.length/5 = 5 , 将数组分为五组,每个数组元素的
2021-06-26 22:17:25 208
原创 八大排序之插入排序
插入排序基本介绍插入式排序属于内部排序法, 是对于欲排序的元素以插入的方式找寻该元素的适当位置, 以达到排序的目的。插入排序思想插入排序(Insertion Sorting) 的基本思想是: 把 n 个待排序的元素看成为一个有序表和一个无序表开始时有序表中只包含一个元素, 无序表中包含有 n-1 个元素, 排序过程中每次从无序表中取出第一个元素, 把它的排序码依次与有序表元素的排序码进行比较, 将它插入到有序表中的适当位置, 使之成为新的有序表插入排序图解插入排序逻辑:首先,
2021-06-24 20:57:25 200
原创 八大排序之选择排序
选择排序基本介绍选择式排序也属于内部排序法, 是从欲排序的数据中, 按指定的规则选出某一元素, 再依规定交换位置后达到排序的目的。选择排序思想选择排序(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 137
原创 八大排序之冒泡排序
基本介绍冒泡排序(Bubble Sorting) 的基本思想是: 通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值, 若发现逆序则交换, 使值较大的元素逐渐从前移向后部, 就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中, 各元素不断接近自己的位置, 如果一趟比较下来没有进行过交换, 就说明序列有序, 因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。 从而减少不必要的比较。 (这里说的优化, 可以在冒泡排序写好后, 再进行)冒泡排序图解第一.
2021-06-22 23:27:19 90
原创 Zookeeper
1.Zookeeper概述Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生了变化,Zookeeper就负责通知已经在Zookeeper上注册的那些观察者做出相应的反应.Zookeeper = 文件系统 + 通知机制2.应用场景 提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服..
2021-06-13 12:54:13 113
原创 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 99
原创 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 767
原创 Hive企业级调优
Hive企业级调优:1. 执行计划(Explain)1)基本语法EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query2)案例实操(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 91
原创 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 984
原创 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-08current_dat...
2021-05-28 12:52:03 87
原创 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 236 2
原创 LeetCode每日一练
LeetCode每日一练:3.无重复字符的最长字符给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。思路: 我们可以在字符串前面定义两个辅助指针,start和end.利用HashMap来摘取字符,以及对应的索引end随着字符向下读而像后走,当遇到相同字符的时候,start就直接指到该字符下.end-start+1 就是字符串的长度...
2021-05-05 22:19:16 121
原创 LeetCode每日一练
LeetCode每日一练:2.两数相加给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。思路: 链表相加,主要是考虑进位的问题,我们可以用引用一个carry来记录进位,再引用一个sum来记录两个链表单位的和sum的真实值 = 链表1 + 链表2 + carry值carry的取值 = sum ...
2021-05-04 14:59:52 125
原创 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 118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人