- 博客(56)
- 收藏
- 关注
原创 7:数组:数组最大连续子序列的和
思路:1.先判断边界条件 num==null || num.length==02.连续变量最大和maxsum;中间变量的最大和tempsum3.遍历数组中所有元素,如果tempsum<=0;让tempsum=0;然后加后面的元素;如果tempsum==0;tempsum就清0;值等于下一个元素;先清0再赋值maxsum=max(maxsum,tempsum);注意:ma...
2019-07-26 11:09:50
232
原创 6:数组:找到数组元素的最小的k个值
思路:采用快速排序。然后求出前k个元素;时间o(nlogn)public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> res=new ArrayLi...
2019-07-26 11:08:55
223
原创 5:数组:数组中有一个数字出现的次数超过数组长度的一半-Java
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:hashmap保存元素以及出现的次数;遍历map找到出现次数超过一半的元素;时间o(n) 空间 o(n)public int MoreThanHalfNum_So...
2019-07-26 11:07:18
418
原创 4:数组:顺时针打印数组
思路:首先判断循环退出的条件: 5x5 矩阵 [2][2] 6*6 [2][2] 只要col> 2*k && row> 2*k[K][K]最后一次打印的起始位置然后循环打印数组:上面一行:没有限制条件右面一列:只有中止行数>起始行数下面一行:中止行数>起始行数 && 中止列数>起始列数 至少两行两列...
2019-07-26 10:09:11
169
原创 3:数组:调整数组顺序使奇数位于偶数前面
https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking输入一个整数数组,...
2019-07-25 21:00:27
238
原创 2:数组:旋转数组的最小的元素
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=11159&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking...
2019-07-25 20:58:04
122
原创 1.数组:二维数组的查找
https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking在一个二维数组中(...
2019-07-25 20:56:03
113
原创 排序算法总结
排序算法的思想什么是排序算法的稳定性? 指两个相同的元素,在多次排序过程中,排序先后的相对位置是否会发生变化。主要用在排序时有多个排序规则的情况。【一般情况下认为,如果两个元素进行相邻的交换,可以认为该算法是稳定的】1.选择排序思想:nums[i],遍历数组,第一次从数组中找到最小的元素,与数组第一个元素进行交换;第二次遍历数组查找第二小元素,与数组第二个元素进行交换;...
2019-07-25 20:44:49
128
原创 数学
链接:https://ac.nowcoder.com/acm/contest/330/J来源:牛客网仅一行三个整数 f1,f2,af1,f2,a,分别表示两只手产生的力的大小以及它们之间的夹角。import java.util.Scanner;public class Main{ public static void main(String[] args){ ...
2019-01-30 12:33:30
114
原创 数学
1.3的幂class Solution { public boolean isPowerOfThree(int n) { if(n<1) return false; if(n==1) return true; int base=3; while(n>1){ if(n%base!=0){...
2019-01-22 11:12:47
104
原创 数学之中位数、众数\平方数
中位数问题:class Solution { public int minMoves2(int[] nums) { // /*第一种解法:以每一个元素为目标对象,求出其他的元素距离目标对象的差之和,满足差值和最小的就是移动的最小数 // 时间复杂度o(n^2)**/ // int min=Integer.MAX_VALUE; // ...
2019-01-21 10:36:31
229
原创 字符串相加
1.阶乘尾部0的个数: class Solution { public int trailingZeroes(int n) { /*2*5=10 有一个0 因此判断n中包含的5及其倍数的个数 n/5+n/5^2+n/5^3+.... n/5表示不大于n的数中贡献一个 n/5^2不大于n的数中5^2贡献一个。。。*/ ...
2019-01-20 11:23:39
368
原创 进制转换
10进制转换成7进制、16进制、26进制都是num%x 余数表示转换以后的进制数;num更新成num/x10进制转换成16进制有补码,难点1.26进制class Solution { public String convertToTitle(int n) { StringBuilder sb=new StringBuilder(); whi...
2019-01-19 11:09:28
181
原创 最短单词路径
最短单词路径给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 be...
2018-12-06 12:19:14
499
1
原创 分治
分治算法:运用分治策略解决的问题一般来说具有以下特点:1、原问题可以分解为多个子问题这些子问题与原问题相比,只是问题的规模有所降低,其结构和求解方法与原问题相同或相似。2、原问题在分解过程中,递归地求解子问题由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解。3、在求解并得到各个子问题的解后应能够采用某种方式、方法合并或构造出原问题的解。...
2018-11-29 10:26:33
275
原创 hash用法
HashMap:空间换时间,key-valueclass Solution { public boolean containsDuplicate(int[] nums) { /* 遍历数组,利用hashset key--nums.value value--nums.index 如果map.value!-...
2018-11-27 10:36:35
1565
原创 二分查找
二分法难点:数据索引的更新/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */public class Solution extends VersionControl { public int firstB...
2018-11-21 15:42:23
140
原创 二分查找
针对排序的数组或者数字,折半查找,时间复杂度O(ologn)计算中值:mid=L+(H-L)/2class Solution { public int mySqrt(int x) { if(x<=1){ return x; } int l=1; int h=x; ...
2018-11-20 12:07:43
143
原创 贪心思想,非递减数列
输入: [4,2,3]输出: True解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。class Solution { public boolean checkPossibility(int[] a) { /* 定义常量来计算交换的次数 如果出现a[i]>a[i+1];应该让a[i]=a[i+1],变小,...
2018-11-16 11:45:39
143
原创 贪心思想:种花
Input: flowerbed = [1,0,0,0,1], n = 1 Output: True应用指针的思想,注意判断边界的条件class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { /* 利用三个指针:当前节点,前一个节点,后一个节点, ...
2018-11-15 10:39:18
138
原创 贪心思想之字符串切分
先从第一个字符开始,找到最后一次该字符出现的位置,然后判断包含在这个范围之内的字符是否满足最后一次出现的位置<=lastIndex,不满足要进行重新更新lastindex;直到所有的字符都在lastindex范围之内class Solution { public List<Integer> partitionLabels(String S) { /...
2018-11-08 10:41:05
147
原创 贪心思想
贪心思想:第一个坐标的尾节点应该尽量与第二个坐标的区间重叠;不重叠要重新更新end坐标 class Solution { public int findMinArrowShots(int[][] points) { /*利用贪婪思想,首先,当气球个数不为一的时候,先射一箭,cnt=1; 接着,这一箭应该射到当前坐标的尽头,才能保证有可能射到后面气球的概率大,如...
2018-11-07 10:16:38
111
原创 贪心思想
先满足局部最优,最后导致全局最优class Solution { public int findContentChildren(int[] g, int[] s) { /*采用贪心的思想 首先满足胃口最小的孩子的最小尺寸m的饼干;这样后面就有尺寸大的饼干能满足更多的孩子 假设有最右策略,分配给它尺寸n的饼干,n>m;根据贪心策略,...
2018-11-05 21:11:30
118
原创 数组中元素与下一个比它大的元素之间的距离
栈/*用辅助数组存储差值;用栈存储数组元素,如果遇到后面的元素大于前一个元素,就弹出栈中的元素*/也就是说,利用栈;先判断相邻的两个数组的大小;如果后一个元素大于前一个元素preIndex,就让辅助数组中Preindex的值为1;如果当前元素不大于前一个元素;就移动数组;判断当前元素与他的后一个元素大小;满足条件,就判断next和pre的大小,依次进行peek()表示栈顶元素pop()...
2018-11-04 10:51:21
902
原创 用栈判断是否对称的字符串
先进入字符串括号的前半部分,然后依次弹出前半部分的元素,看与后半部分的元素是否对称,可以用于判断是否是偶数对称回文class Solution { public boolean isValid(String s) { /*对以一个字符串,采用栈的思想 如果是以(、{、[、开始的,则先存入栈中;在匹配是否有对称的 如果不是这几个字符串,...
2018-11-03 11:07:23
2802
原创 栈的最小元素
构建一个栈,使其有查找最小元素的功能数据栈+辅助栈class MinStack { /** initialize your data structure here. */ private Stack<Integer> dataStack; private Stack<Integer> minStack; private int m...
2018-11-03 10:32:16
202
原创 队列实现一个栈
当插入一个元素时,要实现后进元素先出,需要把该元素之前的元素先出队列,重新进入队列的尾部。此时就实现了后进先出队列插入class MyStack { Queue<Integer> queue; /** Initialize your data structure here. */ public MyStack() { queue=ne...
2018-11-02 11:24:03
149
原创 两个栈实现一队列:
两个栈实现一队列:要加入辅助栈,进行反转操作栈的顺序为后进先出,而队列的顺序为先进先出。使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。class MyQueue { Stack<Integer> in=new Stack<>(); Stack<Inte...
2018-11-02 11:15:12
108
原创 前缀树的和
/*新建前缀树*/1.定义数据结构:根节点的26个子节点,可选,用index表示是哪个单词字母2.新建insert;如果根节点为空,直接返回;如果要插入的字符串为空,就将当前树节点的值设置成给定的value(当前字符串为空有两种情况:1.给定的字符串key=null;value=v;2.key="String",Value=num,在构建树,该key字符串构建完毕,则让当前的节点值等于给定的...
2018-11-01 11:23:20
156
原创 前缀树结构
/*实现一个前缀树*/什么是前缀树?优点?缺点?一般用来做什么?数据结构:包括根节点+儿子节点前缀树的性质:1.每一层节点上面的值都不相同;2.根节点不存储值;除根节点外每一个节点都只包含一个字符。3. 如果字符的种数为n,则每个结点的出度为n,这也是空间换时间的体现,浪费了很多的空间。 4. 插入查找的复杂度为O(n),n为字符串长度。典型应用是 1. 用于统计和排...
2018-10-31 10:44:33
444
原创 二叉搜索树的最小节点绝对值之差/在二叉查找树中寻找两个节点,使它们的和为一个给定值/找出 BST 中的所有众数(出现频率最高的元素)。
关于二叉树的数值运算,一般考虑借用中序遍历为数组;再进行计算的思想。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;...
2018-10-27 10:37:24
620
原创 HDFS基本命令行操作与简单API使用
1.打开集群命令 start-dfs.sh2.查看帮助 hdfs dfs -help3.查看当前目录信息 hdfs dfs -ls /4.从本地上传文件 hdfs dfs -put data.txt /wc/in5.从hdfs下载文件到本地 hdfs dfs -get /wc/in/word.txt ./6.剪切文件 hdfs dfs -moveFromLocal /d...
2018-10-26 11:26:45
379
原创 在二叉查找树中寻找两个节点,使它们的和为一个给定值
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。使用中序遍历得到有序数组之后,再利用双指针对数组进行查找。应该注意到,这一题不能用分别在左右子树两部分来处理这种思想,因为两个待求的节点可能分别在左右子树中。/** * Definition for a binary tree node. * public class T...
2018-10-26 10:31:50
654
1
原创 利用有序数组/链表重构二叉搜索平衡树
因为二叉搜索树中序遍历的结果就是一个从小到大排列的数组,因此数组的中间位置的值,就是二叉搜索树的根节点的值;再依次采用递归,分别构建左右子树。 链表和数组的不同在于,数组可以直接索引找到元素,查找方便,链表不能够直接定位到某一个元素;所以要采用链表自己的方法,求中间位置;断开链表;进行迭代链表解法的难点:1.断开链表:采用双指针思路2.查找链表中间节点位置的表达法3.新建树...
2018-10-25 10:07:08
263
原创 二叉树的公共祖先
1.找出给点过的两个节点的二叉查找树的公共祖先思路:如果当前根节点的值大于给定的两个节点,则他们的公共节点在根节点的左子树中寻找;如果当前根节点的值小于给定的两个节点,则他们的公共节点在根节点的右子树中查找;如果根节点在给定的两个节点之前或者等于其中的某一个节点,都表明了根节点是这两个节点的公共祖先。class Solution { public TreeNode low...
2018-10-25 09:47:29
703
原创 二叉查找树
1.左边节点的值总是小于等于根节点,右边节点的值总是大于等于根节点修建二叉树:把二叉树的每个节点的值限制在一个范围<L,R>之间思路:先判断根节点的值;如果根节点的值,大于R,则递归左子树的值,根节点+右子树被全部抛弃;如果根节点的值,小于L,则递归右子树的值,根节点+左子树被全部抛弃;如果根节点位于两个值之间,则开始递归求解左子树/右子树是否满足上述条件。pub...
2018-10-24 10:09:27
88
原创 二叉搜索树第K小元素
1.思路:迭代法计算出二叉树左节点的个数,如果左节点的个数等于k-1;则根节点就是我们要找的值,如果左节点的个数大于k-1,表明我们要查找的第k个最小元素在左子树中,如果左节点的个数小于k-1,表明要查找的第k个最小元素在右子节点中,找到右子树中第k-count(left)-1个元素就是我们要找的元素/** * Definition for a binary tree node. *...
2018-10-24 09:46:20
554
原创 hadoop数据类型
hadoop的序列化在数据传输的过程中,存储在内存中传输的数据,解决数据在传输过程中因网络传输故障出现的断裂现象。把内存当中正在运行的数据对象,转换成字节序列以便于存储和网络传输反序列化:将收到的字节序列或者硬盘的持久化数据,转换成内存中的对象。 java的序列化:Serializablejava的序列化是一个重量级序列化,会附带很多额外的信息,(效验信息,头信息,继承体系...
2018-10-23 18:52:40
523
原创 MapReduce的核心思想编程
案例需求:统计一个文件(存储的都是单词)200m,查询每个单词出现的次数,(a-i开头的放在一个文件)<j-z开头的放在另外一个文件> datanode200m; datanode默认128m;因此数据分成两快;1.map阶段;调用MapTask任务:第一个datanode数据块:读数据;按行处理;切分;HashMap<单词,value+1>;处理完成后按...
2018-10-23 15:48:09
350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人