自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 awk基础编程

awk基础编程其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母awk是一种编程语言,处理文本和数据的时候逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行并对这些行进行想要的操作。如果没有指定处理动作,那么匹配的行就会显示到标准输出。如果没有指定模式,则处理所有。关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。教程BEGIN{ 这里面放的是执行前的语句 }END {这里面放的是处理

2020-08-06 09:19:17 154

原创 shell命令

常用linuxShell命令echo ${path#:} 把路径path中的第一个冒号前面的值删除echo ${path#::} 把路径path中的第二个冒号前面的值删除,其他的同理,后面还可以跟kecho ${path##:} 把路径path中的最后一个冒号前面的值删除echo ${path%:} 把路径path中的倒数第一个冒号后面的值删除(从后往前裁剪直到遇到的第一个冒号)echo ${path%::} 把路径path中的倒数第二个冒号后面的值删除,其他的同理,后面还可以跟k

2020-08-02 09:28:37 121

原创 mysql学习笔记

mysql学习笔记用到同一张表的两个参数时可以把同一张表用两次吗,名为a,b,进行join,可以不用on 直接where ,是自连接,即连接的是自己的一个镜像。SQL语句的执行顺序,从博客1和博客2可知,顺序为(8) SELECT (9)DISTINCT<select_list>(1) FROM <left_table>(3) <join_type> JOIN <right_table>(2) ON <join_condi

2020-08-02 09:24:25 85

原创 hive踩坑

HIVE踩坑本来hive运行正常,但是由于运行试验spark sql期间把mysql中的所有root相关用户都删除了,只剩一个,且把hive-site.xml配置文件中的连接MySQL用户名和密码都改成了root,所以这次在使用hive时,运行show databases等命令报错MetaException(message:Hive Schema version 2.3.0 does not match metastore's schema version 1.2.0 Metastore is no。

2020-08-02 09:23:39 464

原创 日記20200725

2020年07月25日优秀代码参考ID题目大致内容解题思想注意点151翻转字符串里的单词使用.trim().split("\s+")165比较版本号.split("\.");技巧:当一个已经遍历结束的话,我们将其赋值为 0. String num1 = i < nums1.length ? nums1[i] : "0";166分数到小数模拟除法的过程,a=被除数/除数,被除数更新为num=被除数-除数a, num=num10;一直循环直到nu

2020-08-02 09:22:39 71

原创 日記20200724

2020年07月24日优秀代码参考ID题目大致内容解题思想注意点127单词接龙方法一 广度优先搜索,方法二 双向广度优先搜索131分割回文串回溯137只出现一次的数字 II位运算常用方法积累类名方法名解释ArrayListindexOf(value)返回value值对应的索引值,ArrayListcopyOfRange(T[ ] original,int from,int to)将原数组original

2020-08-02 09:21:15 61

原创 日記20200712

2020年07月12日优秀代码参考ID题目大致内容解题思想注意点49字母异位词分组方法一 普通for循环加used数组,hashmap存string1中各个字符及其出现次数,再去循环,string2中各对应字符及其出现个数,最后hashmap中要是存在value不等于0的键值对,则说两个字符串不符合条件,false。方法二 映射,我们将每个字符串按照字母顺序排序,这样的话就可以把 eat,tea,ate 都映射到 aet。其他的类似。50Pow(x, n)fo

2020-08-02 09:20:41 61

原创 Spark编程学习及配置过程中的踩坑

spark编程教材 Spark编程基础 scala 版 林子雨等 人民邮电Spark SQL代码方面写代码时,出错,首先 看看变量类型,该变量没有这个方法。IDEA中自动填充变量类型快捷键,alt + entershow() 方法默认是只显示20个,可以指定行数,sum(num,boolean),num指的是显示几行,boolean指的是,每行过长时是否截断,false是不截断,默认为true自定义在从RDD隐式转换为DF编程中,case class要放在方法外,比如我的Obje

2020-07-14 23:14:58 121

原创 在windows部署hadoopSpark和IDEA

在windows本地编写spark程序的所需环境为了能在windows使用IDEA编写spark代码,本地跑成功后提交到虚拟机的Ubuntu系统(已经安装hadoop等所有所需的软件)中运行,尝试了以下步骤:Ubuntu中对于maven下载的jar包,可以找到IDEA设置中maven的库文件夹——repository目录,通过FTP客户端直接拷贝到windows下,如D:\maven\repository。随后将windows端IDEA中的maven的repository设置指向D:\maven\r

2020-07-13 19:36:27 159

原创 日記20200711

2020年07月09日优秀代码参考ID题目大致内容解题思想注意点12整数转罗马数字贪心,每次用最大的罗马数字来表示当前数29两数相除相减,可以相减的次数就是商-x 的补码怎么求?把 x 按位取反,末位加 1 。Java 中就是 ~x + 1 了,此时所存的就是 x 对应的那个负数,即它的相反数了。43字符串相乘常用方法积累类名方法名解释ArrayListindexOf(value)返回value值对应的索引值,

2020-07-12 19:01:19 67

原创 日記20200709

2020年07月09日优秀代码参考ID题目大致内容解题思想注意点198打家劫舍动态规划,和题213一致3无重复字符的最长子串滑动窗口,用两个指针和一个hashset。我们使用两个指针表示字符串中的某个子串(的左右边界)。其中左指针代表着上文中「枚举子串的起始位置」,而右指针即为上文中的 rk​; 在每一步的操作中,我们会将左指针向右移动一格, 表示 我们开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针, 但需要保证这两个指针对应的子串中没有重复

2020-07-12 19:00:45 71

原创 日記20200708

2020年07月08日优秀代码参考ID题目大致内容解题思想注意点141环形链表使用hashset,加入节点,判断是否已经包含下一个节点。或者用双指针,fast走两步,slow走一步,如存在fash=slow则true160相交链表先两个指针A和B,同时指在两个链表同时往后走,假如A指向了null,此时B走几步到null,就是两个链表的相差节点个数。我们可以此时再新建指针C为长的链表头节点,和B一起往后走,当B到null了,又新建一个指针D为短链表的头节点。此时

2020-07-12 19:00:14 49

原创 日記20200707

2020年07月07日优秀代码参考ID题目大致内容解题思想注意点58最后一个单词的长度使用库函数split。或者直接从后面开始遍历67二进制求和将短的字符串你补零至两个字符串一样长,反转,从最左边开始计算。若carry+a+b>1,则Strinbuilder.append(carry+a+b-2),且carry=1。其他情况,直接append(carry+a+b)就可以了。最后判断一下carry是否还为1,是的话追加一个1。反转,toString返回.

2020-07-12 18:59:46 65

原创 日記20200706

2020年07月06日优秀代码参考ID题目大致内容解题思想注意点21合并两个有序链表递归迭代28实现 strStr()滑动窗口38外观数列递归迭代常用方法积累类名方法名解释ArrayListindexOf(value)返回value值对应的索引值,ArrayListcopyOfRange(T[ ] original,int from,int to)将原数组original,从下标from开始复制,复制到

2020-07-12 18:59:03 77

原创 日記20200703

2020年07月03日优秀代码参考ID题目大致内容解题思想注意点9回文数把数字转成string,再用StringBuilder的reverse方法反转一下,euqals判断是不是内容相同即可13罗马数字转整数使用hashmap存对应数值,将字符串转为字符数组,如果char[i-1]对应数值 < char[i]对应数字,则sum+=后者数值减前者的差值14最长公共前缀方法一 暴力。for循环,只需要遍历最短的字符串长度即可,扫面每个字符串的每一

2020-07-12 18:58:08 55

原创 日記20200630

2020年06月30日栈优秀代码参考ID题目大致内容解题思想注意点225用队列实现栈用两个队列就可以232用栈实现队列和225思路一样,用两个栈就可以71简化路径把字符串转化成字符数组,以"/“分割,先排除是不是当前目录”.“和空”",然后要是返回上一级,"…",则出栈,不然进栈。字符数组遍历完了,判断栈是不是空,是,返回"/",不然遍历栈中的元素,然后每个元素前加上"/",即fPath.append("/").append(p);, 返回

2020-07-01 20:23:16 56

原创 日記20200625

2020年06月25日数组多数投票算法(Majority Vote Algorithm)。给一个数组,其中含有N个非负元素,让你求出数组中出现次数超过一半的数字。(排序的时间复杂度一般来说是O(NlogN),那么有没有时间复杂度为n的算法呢? )设置一个计数器count和保存最多元素的变量majority,如果count==0,则将now的值设置为数组的当前元素,将majority赋值为1;反之,如果majority和现在数组元素值相同,则count++,反之count–;重复上述两步

2020-07-01 20:22:35 84

原创 日記20200624

2020年06月24日数组优秀代码参考ID题目大致内容解题思想注意点153寻找旋转排序数组中的最小值关键是需要找到旋转点。用二分法,终止条件是if (nums[mid] > nums[mid + 1]) { return nums[mid + 1]; }和if (nums[mid - 1] > nums[mid]) { return nums[mid]; }。需要注意的是,判断更新变量lo和hi的条件是if (nums[mid] >= nums[0])

2020-07-01 20:20:43 66

原创 日記20200623

2020年06月23日数组优秀代码参考ID题目大致内容解题思想注意点59螺旋矩阵 II使用和题54的思想就行只不过是在每次遍历时赋值即可,不过需要注意的是,遍历时的条件需要加上num<=n*n, 即赋值的数不能超过给定值n的平方73矩阵置零遍历原始矩阵,如果发现如果某个元素 cell[i][j] 为 0,我们将第 i 行和第 j 列的所有非零元素设成很大的负虚拟值(比如说 -1000000),最后,我们便利整个矩阵将所有等于虚拟值的元素设为 0。

2020-07-01 20:20:02 57

原创 日記20200622

2020年06月22日数组二分查找while用<还是<=,很难判断。题34用<。 int right = nums.length;时,用while (left < right),同时注意,需要right = mid,此时区间为[left, right),因为是左闭右开区间,所以right=mid也取不到mid。以上是对于搜索左右侧边界的二分查找。优秀代码参考ID题目大致内容解题思想注意点34在排序数组中查找元素的第一个和最后一个位置使用

2020-06-23 20:18:40 257

原创 日記20200621

2020年06月21日数组优秀代码参考ID题目大致内容解题思想注意点11盛最多水的容器可以暴力。优化,双指针。思想:当移动短板,那么面积一定小于或等于原来面积。15三数之和先将数组排序,然后遍历,当前数字nums[i], 如果nums[i]>0, 说明之后的数相加不可能为0,直接break;不>0, 给两个指针L=i+1, R=len-1.如果nums[i]+nums[L]+nums[R]==0, 加入结果集合。L++,R–, 继续遍历。注意排除

2020-06-23 20:18:12 43

原创 日記20200620

2020年06月20日链表优秀代码参考ID题目大致内容解题思想注意点82删除排序链表中的重复元素 II初始化预先节点dummy,用一个pre指针,while循环直到到值相同的最后一个节点,pre.next指向该节点86分隔链表新建两个链表max和min,遍历原来链表,小于的放在min中,其余放在max,再把min的尾部指向max的头部,返回min的头部92反转链表 II双指针,p指在m-1位置,g指在m-2。将m位置的结点的指向g.next, 即

2020-06-23 20:17:38 54

原创 日記20200619

2020年06月19日链表优秀代码参考ID题目大致内容解题思想注意点257二叉树的所有路径递归2两数相加注意进位问题,当和大于等于10,sum=sum%10;carry=sum/10小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点head。使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果。19删除链表的倒数第N个节点先

2020-06-23 20:17:14 40

原创 日記20200618

2020年06月18日深度优先搜索 && 树优秀代码参考ID题目大致内容解题思想注意点207课程表方法一BFS,判断此课程安排图是否是 有向无环图(DAG)。对 DAG 的顶点进行排序,使得对每一条有向边 (u,v),均有 u(在排序记录中)比 v 先出现。亦可理解为对某点 v 而言,只有当 v 的所有源点均出现了,v才能出现。先生成入度表和邻接集合,随后遍历,当入度为0时,进入队列。当队列不为空时,出队,课程数-1。将其入度表对应位置减1,若入读等于

2020-06-23 20:16:25 82

原创 日記20200617

2020年06月17日深度优先搜索优秀代码参考ID题目大致内容解题思想注意点200岛屿数量方法一DFS。利用常用技巧方向数组,回溯4个方向上,当前元素是1且没被遍历过就可以使用dfs。方法二 BFS,搭配辅助队列使用。使用小技巧:把坐标转换为一个数字queue.addLast(i * cols + j);就不需要数组存了。常用方法积累类名方法名解释ArrayListindexOf(value)返回value值对应的索引值,Arr

2020-06-23 20:15:47 59

原创 日記20200616

2020年06月16日深度优先搜索DFS搭配递归,BFS要搭配队列。优秀代码参考ID题目大致内容解题思想注意点129求根到叶子节点数字之和方法一回溯。方法二分治。两种方法思想一样,实现手法上不一样而已。都是先不断找子节点,当一个节点的左右节点都为空时返回130被围绕的区域从边界的 O 做 DFS,然后把遇到的 O 都标记一下,这些 O 就是可以连通到边界的。然后把边界的所有的 O 都做一次 DFS ,把 DFS 过程的中的 O 做一下标记。最后我们

2020-06-23 20:15:14 58

原创 日記20200615

2020年06月15日深度优先搜索优秀代码参考ID题目大致内容解题思想注意点117填充每个节点的下一个右侧节点指针 II和116题一样。方法一的代码都一样常用方法积累类名方法名解释ArrayListindexOf(value)返回value值对应的索引值,ArrayListcopyOfRange(T[ ] original,int from,int to)将原数组original,从下标from开始复制,复制到上标to,生成

2020-06-21 11:16:06 62

原创 日記20200614

2020年06月14日深度优先搜索优秀代码参考ID题目大致内容解题思想注意点109有序链表转换二叉搜索树方法一 递归+指针。两个指针 slow_ptr 和 fast_ptr。slow_ptr 每次向后移动一个节点而 fast_ptr 每次移动两个节点。当 fast_ptr 到链表的末尾时 slow_ptr 就访问到链表的中间元素。对于一个偶数长度的数组,中间两个元素都可用来作二叉搜索树的根。当找到链表中的中间元素后,我们将链表从中间元素的左侧断开,做法是使用一个 pre

2020-06-21 11:15:33 46

原创 日記20200613

2020年06月13日深度优先搜索优秀代码参考ID题目大致内容解题思想注意点98验证二叉搜索树方法一 递归,设定上下界,左子树的上界是根节点的值,右子树的下界是根节点的值。方法二 中序遍历。只要再中序遍历中当前节点值大于前一个结点的值,则符合条件。用栈来模拟中序遍历。方法二的实现过程很巧妙105从前序与中序遍历序列构造二叉树方法一 递归,利用前序和中序的顺序特性。方法二 迭代 栈。我们用一个栈保存已经遍历过的节点,遍历前序遍历的数组,一直作为当前根节点的左子

2020-06-21 11:14:26 59

原创 日記20200612

2020年06月12日哈希表 深度优先搜索当判断set中是否有该数,或者判断次数有无与先前出现的重复,不需要contains方法,直接return add方法就行。因为set唯一,且add方法的返回值是是否添加成功。hashmap,如何当知道value的时候删除元素?不行。利用key是内容,value放该内容的个数。当检查到map中含有这个内容的时候,进行相应操作,随后需要删除这个内容。怎么删除呢?先是将value-1,再判断value==0,即map.get(key)==0,成立删除map.

2020-06-21 11:13:52 59

原创 日記20200611

2020年06月11日排序数组int[] nums 转成ArrayList方法:List nums=Arrays.asList(nums); //1. 使用Arrays.asList。1.1该方法返回的是基于数组的List视图(List view)。所以,这种方式是将数组转换为List的最快的方式。因为返回的只是视图,不需要多余的内存来创建新的List以及复制操作;1.2 该方法返回的List是长度是固定的(fixed),不是只读的。所以我们不能进行删除、添加操作,而可以使用set()方法进

2020-06-21 11:13:25 74

原创 日記20200610

2020年06月10日数组 && 排序线性结构:顺序存储:数组、栈、队列。在不排序的情况下,插入、删除、查找困难;在排序的情况下,插入、删除困难。 优点是利用索引查找方便;链式存储:链表(单链表、循环链表、双链表)。克服顺序存储的一些缺点,插入和删除方便,但是无论排序与否,查找仍旧困难;树结构:综合顺序和链式存储的优点,删除增加查找方便。比如二叉排序树(二叉查找树BST),插入删除查找都很简单。要是要返回一个数字int(正整数),但是输入参数不符合条件,就不可

2020-06-21 11:12:44 58

原创 日記20200609

2020年06月09日数组判断一个整数num的长度:(num+"").length()优秀代码参考ID题目大致内容解题思想注意点53最大子序和动态规划(和乘积最大的连续子数组一样),优化空间的动态规划(preMax,curMax),分治(分类)66加一数组,需要考虑进位。加一得十,进一位个位数为 0 。加法运算如不出现进位,运算就结束了,且进位只会是一。88合并两个有序数组直接合并再排序、双指针(从前往后)、双指针(从后往前)1

2020-06-21 11:12:11 54

原创 日記20200608

2020年06月08日分治算法 && 数组归并排序算法完全遵守分治模式。分治模式每层递归都会有三个步骤:分解原问题、解决子问题、合并这些子问题的解成原问题的解。最大子数组:具有最大和的连续子数组,可用分治算法。小技巧,计算中值,不要前后加除以2,要mid = (left + right) >>> 1上述运算结果正好能对应一个整数的二分之一值,这就正好能代替数学上的除2运算,但是比除2运算要快。int mid = (left + right)

2020-06-21 11:11:41 50

原创 日記20200607

2020年06月07日贪心算法可以先找递归贪心算法解决问题,并将递归算法转化为迭代算法,则完成贪心方法的过程。贪心算法通常都是自顶向下的设计:做出一个选择,然后求解剩余下的那个子问题,而不是自底向上地求解出很多问题,然后再做选择。贪心算法可能依赖之前作出地选择,但不依赖将来地选择。小技巧,如何无限循环遍历数组,取余数remain = remain - cost[j] + gas[(j + 1) % n];j = (j + 1) % n;其中%,当j+1超过n后,由于取余,又从头

2020-06-21 11:10:49 56

原创 日記20200606

2020年06月06日动态规划回溯算法,需要记录过程,复杂度通常较高。动态规划是用空间(填表格)换时间的时间,所以有些情况表格可以复用。如当前情况只和上一个情况相关。常用复用方法:滚动数组(当前行只参考了上一行的时候,可以只用 2 行表格完成全部的计算);滚动变量(斐波拉契数列问题)。解决递归中堆栈溢出的问题的一个思路就是使用动态规划(DP)技术.优秀代码参考ID题目大致内容解题思想注意点120三角形最小路径和动态规划,自底向上。要是带记

2020-06-21 11:10:17 47

原创 日記20200605

2020年06月05日动态规划优秀代码参考ID题目大致内容解题思想注意点63不同路径 II动态规划。注意,若是一行或一列上有一个障碍物,即“1”,那么该行或该列上的值都应初始化为“1”。64最小路径和动态规划,状态方程的编写,每次要选取最小的才行91解码方法动态规划,是一维的,要清楚运用分类计数的加法和乘法原理95不同的二叉搜索树 II动态规划,得明白二叉搜索的特性,难96不同的二叉搜索树动态规划,由卡特兰数推出常

2020-06-05 23:14:55 78

原创 日記20200604

2020年06月04日动态规划Java Vector类。实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:Vector 是同步访问的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。有三种构造方法,其中Vector(int size,int incr),创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。动态规划与分治相似,只不过分治会做

2020-06-05 23:14:22 51

原创 日記20200531

2020年05月31日leetcode优秀代码参考ID题目大致内容解题思想注意点77组合回溯78子集回溯79单词搜索回溯搜索对象是一个两维数组,不再是一个一维数组,定义一个上左右下的方向二维数组90子集 II回溯。难点在于怎么控制重复的元素不搞出重复的子集,但是在子集中又可以出现,比如[1,2,2],子集[1,2],[1,2],因为索引1和2上都是2,所以子集重复了,要避免。而[1,2,2]又是允许的。我用.contains()判断耗

2020-06-05 23:13:52 73

原创 日記20200528

2020年05月28日leetcode优秀代码参考ID题目大致内容解题思想注意点40组合总和 II和组合总和解法一样,只不过下一次从i+1开始,而不是i。如何去掉一个数组中重复的元素,除了使用哈希表以外,我们还可以先对数组升序排序,重复的元素一定不是排好序以后的第 1 个元素和相同元素的第 1 个元素。根据这个思想,我们先对数组升序排序是有必要的。候选数组有序,对于在递归树中发现重复分支,进而“剪枝”也是有效的。46全排列回溯。因为要取遍所有,不用剪枝,所以

2020-06-05 23:13:03 82

空空如也

空空如也

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

TA关注的人

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