09 2017 档案
摘要:package TT; public class Test206 { public static void shellSort(int[] data){ int h=1; while(h0){ for(int i =h; i=0 && tmp<data[j]){ data[j+h]=data[j]; j-=h; } data[j+...
阅读全文
摘要:package TT; public class Test206 { public static void InsertSrot(int[] arr){ int i,j; int target; for(i=1;i0 && target<arr[j-1]){ arr[j]=arr[j-1]; j--; } arr[j]=target; ...
阅读全文
摘要:用一个索引位置上的元素,一次与其他索引位置上的元素比较 然后进行交换 小的放前面就好了 两层for循环 第一层 锁定一个值 拿到第二层去从他的前面的 比较 走一遍 然后一直这么玩儿下去
阅读全文
摘要:外层循环决定几次 内层循环比较几次 五个数比较四次就OK了 arr.length-1 此 外循环的 数组是引用传递哦哦哦哦嘎嘎
阅读全文
摘要:autoconf 可以生成 configure文件 在编译时候很有用!
阅读全文
摘要:给定一个数组arr,返回arr最长递增子序列 要求 如果长度为N 请实现时间复杂度为O(N logN)的方法 动态规划解题思路: 1 生成长度为N的数组dp, dp[i]表示在以arr[i]这个数结尾的情况下,arr[0....i]中的最大递增子序列长度 2 对第一个数arr[0]来说,令dp[0]
阅读全文
摘要:给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径和中最小的路径和 非常明显的动态规划题目,一目了然
阅读全文
摘要:给定一颗二叉树的头节点head和一个32位整数sum,二叉树节点值类型为整型,求累加和胃sum的最长路径长度。 这个问题 参考之前 “求未排序数组中累加和为规定值的最长子数组长度”
阅读全文
摘要:二叉树被记录成文件的过程叫做二叉树的序列号。通过文件内容重建原来二叉树的过程叫做二叉树的反序列号。 给定一个二叉树头节点head,并已知二叉树节点值的类型为32位整型。设计一种二叉树序列化,和反序列化方案,并且代码实现。 方法一,先序遍历下的序列化过程,首先假设徐立华的结果字符串为str,初始str
阅读全文
摘要:创建RDD 有两种方式 1 通过hdfs支持的文件系统创建 RDD, RDD里面没有真正要计算的数据,只记录了一下元数据 2 从过scala集合或者数组以并行化的方式创建RDD collect 把结果收集起来放到 scala数组里面 reduce 汇聚 方法传进去 count rdd有多少元素 to
阅读全文
摘要:官网上最清晰 sc 启动spark时候就已经初始化好了 sc.textFile后 会产生一个rdd spark 的算子分为两类 一类 Transformation 转换 一类 Action 动作 Transformation 延迟执行 记录元数据信息 当计算任务触发Action时候才会真正的开始计算
阅读全文
摘要:cd 到hadoop中 然后格式化 进入到 bin下 找到 hdfs 然后看看里面有哈参数: ./hdfs namenode -format 格式化 然后启动 sbin/start-dfs.sh hdfs的关系界面 http://192.168.94.132:50070/ 创建文本: 创建个目录 h
阅读全文
摘要:网页访问时候 没有打开 注意防火墙! 启动park shell bin下面的spark-shell 这样启动的是单机版的 可以看到没有接入集群中: 应该这么玩儿 用park协议 spark://192.168.94.132:7077 地址 协议 ./spark-shell --mster spark
阅读全文
摘要:安装jdk 下载spark安装包 解压 重点来了: 配置 spark: 进入 conf 》 spark-env.sh.template文件 cd conf/ mv spark-env.sh.template spark-env.sh vi spark-env.sh 添加: 在该配置文件中添加如下配置
阅读全文
摘要:python正则表达式re模块 打文本中搜索某个字段 python有个库 re import re 正则表达式 . 点表示任意的字符 [a-z] 这个位置一定是个小写a到z的字母 print(lent(result)) 打文本中搜索某个字段 python有个库 re import re 正则表达式
阅读全文
摘要:给定数组arr和整数num,共返回有多少个子数组满足 <= num 数组长度N 时间复杂度O(N)
阅读全文
摘要:一个数组的MaxTree定义如下: 数组必须没有重复元素 MaxTree是一颗二叉树,数组的每一个值对应一个二叉树的节点 包括MaxTre树在内且在其中的每一颗子树上,值最大的节点都是树的头 给定一个 没有重复元素的数组arr,写出生成这个数组的MaxTree的函数,要求如果数组长度为N, 时间复杂
阅读全文
摘要:有一个整型数组arr 和一个 大小为w的窗口从数组的最左边滑倒最右边,窗口每次向右边滑动一个位置 如果数组长度为n, 窗口大小为w, 则一共产生 n-w+1 个窗口的最大值 请实现一个函数: 输入 整型数组 arr, 窗口大小 w 输出 一个长度为 n-w+1 的数组res res[i] 表示每一种
阅读全文
摘要:最近这段时间正在积极准备面试,复习到操作系统部分,本篇文章就介绍操作系统基础内容,参考第四版《计算机操作系统》这本文章总结了面试中常考、常用到的基本知识点,希望对准备面试的同学和想回顾操作系统知识点的程序员们有所帮助,不对的地方欢迎指正! 一、操作系统引论 操作系统目标 1:方面性,2:有效性,3:
阅读全文
摘要:用一个栈实现另一个栈的排序 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序。只允许申请一个栈。除此之外可以申请新的变量,但不能申请额外数据结构 思路: 将要排序的栈记为 stack, 申请的数组栈记为help。 stack上执行pop操作, 弹出的元素记为cur 如果cur <=
阅读全文
摘要:一个栈一次压入 1 2 3 4 5 那么从栈顶到栈底分别为 5 4 3 2 1. 将这个栈转置后,从栈顶到栈底为 1 2 3 4 5 实现栈中元素的逆序 要求只能用 递归函数实现 代码: 这个代码是这么理解: 最后一层递归 空的时候 return result=1 last此时就是1了 然后push
阅读全文
摘要:编写一个类,用两个栈实现队列,支持队列的基本操作(add poll peek) 栈的特点是先进后出,而队列是先进先出。用两个栈正好能把顺序反转过来实现类似队列的操作 具体实现: 一个栈作为压入栈,在压入数据时候,在压入数据时只往这个栈中压入,记为 stackPush 另一个栈只作为弹出栈,在弹出数据
阅读全文
摘要:实现一个特殊的栈,在实现栈的基本功能基础上,再实现返回栈中最小元素的操作。 思路: 在设计上 使用两个栈,一个用来保存当前栈中的元素,其功能和一个正常的栈没有区别。记为 stackData 另一个栈用来保存每一步的最小值,这个栈记为 stakMin 压入数据规则: 假设当前数据为 newNum 先将
阅读全文
摘要:给定一棵二叉树的头节点head, 按照两种标准分别实现二叉树边界节点的逆时针打印 标准一 头节点为边界节点 叶节点为边界节点 如果节点在其所在的层中是最左或者最右边,那么也是边界节点 标准二 头节点作为边界节点 叶节点位边界节点 树左边界延伸下去的路径为边界节点 树有边界延伸下去的路径为边界节点
阅读全文
摘要:用递归解决的问题都能用非递归解决 这是因为无非就是利用函数栈来保存信息,如果自己申请的数据结构来代替栈,也可以实现相同功能。 实现非递归的先序遍历: 1 申请一个栈 stack 2 然后将头节点head压入stack 3 从stack中弹出栈顶节点 cur, 打印cur的节点值。 再将cur的右孩子
阅读全文
摘要:递归: 下面用图形的方式解释一下这个递归的执行过程,可能有些同学对于这个过程不是很了解: 如果是这个样子的二叉树: 首先是这样:对于每行逻辑代码 我做了个标记 对于函数的的调用时需要入栈 进栈的
阅读全文
摘要:Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算 Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。 Spark生态圈即BDAS 》 Spark具有很强的适应性,能够读
阅读全文
摘要:把链表右边的 拿过来以此插入到左边的链表 思路: 如果链表长度为N,直接给出时间复杂度为O(N) 额外空间复杂度为O(1)的方法 1 如果链表为空,或者长度为1 不调整 2 链表长度大于1时, 遍历一便找到左半区最后一个节点 记为mid
阅读全文
摘要:给定两个有序单链表的头节点head1 和 head2 ,请合并两个有序链表,合并后的链表依然有序,并返回合并后链表的头节点 假设两个链表长度为M和N 直接给出时间复杂度为(M+N) 额外空间复杂度O(1) 1 如果两个链表中一个为空 则无需合并 返回另一个的链表头节点 2 比较head1 和 hea
阅读全文
摘要:题目: 一个环形链表从表头节点head开始不降序,同时由最后的节点指回头节点。给定这样一个环形单链表的头节点和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序 时间复杂度O(N) 额外空间复杂度O(1) 的方法 1 生成节点的值为num的新节点, 记为n
阅读全文
摘要:链表节点值类型为int,给定一个链表中的节点node,但不给定头节点,如何在链表中删除node? 你看看代码就知道 这个思想有多么操蛋了哈哈哈哈
阅读全文
摘要:给定一个无序单链表的头节点head,实现单链表的选择排序 要求额外空间复杂度O(1) 思路: 既然额外空间复杂度O(1),就不能把链表装进容器,排好序后再从新链接,而是要求面试者在原链表上利用有限几个变量完成选择排序的过程。 选择排序是从未排序的部分找到最小值,然后放到排好序部分的尾部。 1 开始时
阅读全文
摘要:给定一个链表的头节点head和一个整数num,请实现函数将值num的节点全部删除 方法一 利用栈或者其他容器收集的方法 时间复杂度O(N) 额外空间复杂度O(N) 将值不等于num的节点收集起来!!!哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈啊哈哈 最后将占地的节点作为新的头节点返回 方法二 直接调整 首先从链
阅读全文
摘要:给定一个无序单链表的头节点head,删除其中重复出现的节点 要求: 方法1 长度N 时间复杂度O(N) 方法2 额外空间复杂度O(1) 方法一 1 生成哈希表 头节点是不用删除的节点 所以首先将头放入哈希表 2 从头节点的下一个节点开始往后遍历 cur,检查是否在哈希表中,在则删除,不在 加入 同时
阅读全文
摘要:给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整。k<1 没有意义,k==1代表1个节点为1组进行逆序,原链表不变。 介绍两种方法: 方法一 利用栈结构 1、从左到右便利链表,如果栈的
阅读全文
摘要:单链表,可能有环,也可能无环。给定两个单链表的头节点head1 和 head2 这两个链表可能交也可能不交。实现函数,如果相交,请返回相交的第一个节点,不交返回null 这道题目需要分析的情况非常 本题拆分长三个子问题,每一个子问题都可以作为一道独立的算法题。 问题一、 如何判断有环 有则返回第一个
阅读全文
摘要:对于这个问题还有一个很好的方法: 1、将两个链表逆序,这样就可以依次得到从低到高位的数字 2、同步遍历两个逆序后链表,相加生成新链表,同时关注进位 3、当两个链表都遍历完成后,关注进位。 4、 将两个逆序的链表再逆序一遍,调整回去 返回结果链表
阅读全文
摘要:假设链表中每一个节点的值都在0~9之间,那么链表整体就可以代表一个整数 给定两个链表的头节点head1和head2,请生成代表两个整数相加值的结果链表 传统做法 先把链表生成 整数 然后相加 这样的有个溢出问题 介绍一种做法: 利用栈结构求解: 1、 将两个链表分别从左到右遍历,遍历过程中将值压栈,
阅读全文
摘要:一种特殊的链表节点类描述如下: public class Node{ public int value; public Node next; public Node rand; public Node(int data){ this.value = data } } rand指针是Node类中的新增
阅读全文
摘要:给定一个单向链表的头节点head,节点的值是整型,再给定一个整数pivot。实现一个调整函数,左部分<pivot 中间=pivot 右边>pivot,除这个要求外,其他顺序不可改变
阅读全文
摘要:给定一个链表的头节点head,判断是否是回文结构 1->2->1 返回true 进阶: 如果链表长度N,时间复杂度O(N) 额外空间O(1) 方法一 利用栈结构(需要额外空间) 从左到右遍历,一次压栈。 这样的到的 从栈顶到栈底的节点值出现顺序会与原链表从左到右的值出现顺序相反。 废话不多说,上代码
阅读全文
摘要:著名的约瑟夫杀人问题 哈哈哈哈 解读: 输入:一个环型单向链表的头节点head和报数m 返回: 最后生存下来的节点,并且这个节点自己组成环形单向链表,其他的节点都删掉 进阶问题: 如果链表节点数为N,想在时间复杂度为O(N)时完成原问题的要求,咋办? 普通解法: 如果链表为空或者节点数为1 或者m<
阅读全文
摘要:给定单链表的表头节点head, 以及两个整数from 和 to, 在单向链表上把fro个节点到第to个节点这一部分进行反转 思路: 本题 有可能存在换头的问题,所以函数应该返回调整后的新的头节点 1 判断是否满足 1<=from<=to<=N 如果不满足,直接返回原来的头节点 2 找到第from-1
阅读全文
摘要:分别实现反转单向和双向链表的函数 看代码: 可以用栈实现: 反向双向链表 调节指针的算法:
阅读全文
摘要:给定链表的表头节点head,实现删除链表的中间节点的函数 推展: 给定链表的头节点,整数a 和 整数 b,实现删除a/b处节点的函数 先来分析原问题, 长度1 直接返回 长度2 将头节点删除 长度3 删除第二个 长度4 删除第二个 长度5 删除第三个。。。。。。长度每增加2 删除的节点就向后移动一个
阅读全文
摘要:分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 当链表走到头时候 如果k值大于0 说明不用调整 因为链表根本没有倒数第k个节点 此时将原链表直接返回即可
阅读全文
摘要:给定两个有序链表的头指针 head1 和 head2,打印两个链表的公共部分 思路: 有序嘛, 如果head1 的值小于 head2, head1往下移动 如果head2的值小于head1,head2往下移动 如果相等,打印这个值,然后同时向下移动 两个有一个为null, 整个过程停止
阅读全文
摘要:给定一个无序整型数组arr,找到数组中未出现的最小正整数 解题思路非常好,需要好好学习一下,很逻辑 如果arr长度为N, 最优解可以做到时间复杂度O(N) 额外空间复杂度O(1) 1、遍历arr之前生成两个变量, l r 初始值 l=0 r=N 2、从左到右遍历arr,arr[l] 3、如果arr[
阅读全文
摘要:给定一个数组arr, 其中只可能有 0,1,2三个值,请实现arr排序 另一种问法: 有一个数组,只有红 蓝 黄 球,请事先红球全放在数组的左边,蓝球放中间,黄球放右边 另一种问法: 有一个数组,再给定一个值K, 请实现比k小的数都放在数组的左边,等于k的放中间,大于k的放右边 思路: 生成变量le
阅读全文
摘要:给定一个有序数组arr, 调整arr使得这个数组的左半部分没有重复元素且升序,而且不用保证右边是否有序 分区就ok了 u区是 无重复且升序的 u是这个区域的最后位置,初始u=0 i做从左到右的遍历,在arr[u+1....i]上是不保证没有重复元素且升序的区 i是这个区域的最后位置 i向右移动 因为
阅读全文
摘要:给定一个整型数组arr,返回不包含本位置的乘数组 一般做法是用除法,新方法: 一个位置上 除去 自己值的累乘,就是自己左边的累乘再乘以自己右边的累乘,即 res[i]=lr[i-1]*rl[i+1] 最左的位置 和 最右的位置 比较特殊, 即 res[0]=rl[1] , res[N-1]=lr[N
阅读全文
摘要:要是知道了i-1结尾的最小累乘积min ,最大累乘积max, 那么y结尾的最大累乘积有三种可能 max * arr[i] min * arr[i] arr[i] 具体过程看代码实现:
阅读全文
摘要:给定无序数组arr, 已知arr中任意连个相邻的数都不相等。 写一个函数,只需返回arr中任意一个局部最小出现的位置 本题利用二分查找 1 如果arr为空后者长度为0,返回-1 2 如果arr长度为1或者arr[0]<arr[1] 返回0 3 如果arr[N-1] < arr[N-2] 返回N-1
阅读全文
摘要:给定一个矩阵matrix, 其中的值有正 负 0 ,返回子矩阵的最大累加和 这个是 子数组最大累加和问题的 升级版 看例子就懂了: 如果只有两行,那么 上下两行相加,得出列加数组 得出最大累加和 总结整个过程,关键之处在于: 用求累加数组的最大累加和是的的方式得到每一步的最大子矩阵的累加和 每一步的
阅读全文
摘要:给定一个数组arr, 返回子数组的最大累加和 要求 如果长度为N 要求时间复杂度O(N) 额外空间复杂度O(1) 解题思路: 如果没有正数 产生的最大累加和一定是 数中最大的那个 如果有正数 遍历到正数增加 遍历到负数减小 当小于0时候 说明累加到当前数出现了小于0的结果,那么累加的这一部分肯定不能
阅读全文
摘要:给定一个长度不小于2的数组arr,实现一个函数调整arr, 要么让所有的偶数下标都是偶数,要么让所有奇数下标都是奇数 这道题 在不停的交换和判断中 走向了成功 初始值 enven =0 odd=1 每次交换完了对应的 +2 看代码,一目了然:
阅读全文
摘要:给定一个长度为N的整型数组arr, 其中只有N个互不相等的自然数 1~N 请实现 arr的排序, 但是不要把下标0~N-1位置上的数通过直接赋值的方法替换成 1~N 分析: arr在调整之后应该是下表从 0 到 N-1的位置上以此放着1~N 即 arr[index] = index+1 从左到右遍历
阅读全文
摘要:一个数组中 每个元素左边比他小的和 然后都加起来 这个题目非常牛逼,可以用归并加速法,在归并的过程中做文章!!! 代码展示: 结果:
阅读全文
摘要:给定一个无序数组arr,其中元素可正、可负、可0,给定一个整数k,求arr所有的子数组中累加和小于或等于k的最长子数组长度。 例如: arr=[3,-2,-4,0,6] , k=-2, 相加和小于或者等于-2的最长子数组为{3,-2,-4,0}, 所以结果返回4 解题思想(我称之为预处理思想): 预
阅读全文
摘要:可正 负 0 的数组,给定一个正整数k 求arr 所有子数组中累加和为k的最长子数组问题 s(i) 代表前i个元素的和,那么子数组arr[i.....j]的累加和为 s(i)-s(j-1) 这是题目的核心!!! 这样原问题解法,只遍历一遍。 设置map key表示此处的sum值 value表示出现的
阅读全文
摘要:例如 arr=[1,2,1,1,1] k=3 累加和为 3的最长子数组为[1,1,1] 所以结果为3 思路方法: 两个指针 left 和right 初始值都是0 都在左边 sum 代表 子数组 left.....right的和 len 一直记录累加和为k的所有子数组中最大子数组的长度 根据 sum与
阅读全文
摘要:这个问题跟上一个 大同小异,如何不重复打印呢? 首先保证选定三元数组中第一个值不重复,剩下的就跟前一个题目一样了。
阅读全文
摘要:给定一个排序数组arr 和整数 k, 在里面找到所相加为k的二元数组。 思路: 充分利用有序呀 二元数组嘛 可以两个指针 一个 left 一个right 不断向中间压缩 看看和与k的关系 然后移动相应的指针
阅读全文
摘要:如果一个数组在排序之后,每相邻两个数差的绝对值都为1,则该数组为可整合数组 方法一(通俗的做法) 考察每个子数组 > 复制成新数组 > 新数组排序 >验证是否符合 代码: 改进的方法: 加速验证过程,前方高能!!!!! 》》》》》》》》》 判断一个数组是否可是可整合, 如果 max-min+1= 元
阅读全文
摘要:给定一个NXM的整型矩阵,和一个整数K,每一行,每一列都是排好的。判断K是否在matrix中 反正上下已经排列好了 初始位置定在左上角,然后开始,比较 ==K 返回 <k 往下走 row++ >k 往左走 col-- 代码实现: 完整代码可以这么玩儿:
阅读全文