算法
文章平均质量分 76
upupday19
这个作者很懒,什么都没留下…
展开
-
Set Matrix Zeroes
需求:Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.Example 1:Input: [ [1,1,1], [1,0,1], [1,1,1]]Output: [ [1,0,1], [0,0,0], [1,0,1]]分析:1、...原创 2018-06-08 10:15:02 · 170 阅读 · 0 评论 -
java实现死锁
死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。在多线程中,如果同步中嵌套同步,即多个线程互相拥有对方需要的资源而不释放,就会造成所有的线程都无法执行。产生是原因有四个:1)竞争资源引起进程死锁 2)可剥夺资源和不可剥夺资源 3原创 2018-01-16 19:12:20 · 1289 阅读 · 0 评论 -
动态规划--更新数组值为其右边最大值
需求:Given an array of integers, replace every element with the next greatest element (greatest element on the right side) in the array. Since there is no element next to the last element, replace it wi...原创 2017-11-22 21:54:34 · 346 阅读 · 0 评论 -
替换字符串中的空格
需求: 将字符串中的空格转成"%20",然后返回分析: 在java中,字符串的字符替换有三种方式:replace(char oldchar, char newchar) replace(CharSequnce old, charSequence new) replaceAll(String old, String new)。 1、判断字符串是否是null或者长度是0,这两原创 2017-12-07 14:39:34 · 508 阅读 · 0 评论 -
链表的创建和正向反向输出
需求: 给定一个链表的头部节点,从尾到头依次输出所有的节点值分析: 1、思路一 比较容易想到的是,遍历链表,将节点值存到集合中,然后反向输出 2、思路二 一般是从前向后遍历链表,但此处要求反向输出,可以想到先进后出的数据结构是栈,因此可以创建栈,然后将节点值依次存到栈中,然后依次pop()代码:import java.util.*;//节点类原创 2017-12-07 19:51:33 · 2127 阅读 · 0 评论 -
查找有序二维数组中是否包含特定值
需求: 给定一个整型二维数组,每一行是递增顺序,每一列是递增顺序,查找其中是否包含某个指定数值分析: 1、根据二维数组大小分布情况可知,二维数组的右下角是最大值,左上角是最小值,左下角和右上角是中间值,并且数的增长方向是单一的,可以将左下角或者右上角作为比较标准。如果目标值比左下角小,那么一定在最左边列中,如果比左下角大,那么一定在右边的列中,列数减少。如果目标值比右上原创 2017-12-07 16:42:26 · 501 阅读 · 1 评论 -
java实现--字符串中第一个单独出现的字符
需求: 给定一个由大写字母组成的字符串,返回第一个单独出现的字母分析: 1、思路一 创建HashMap集合,遍历字符串,将各个字母及对应的角标存到集合中,再次遍历字符串,看当前字符对应的角标和HashMap集合中的角标是否相同,如果相同就直接返回,如果不同,将HashMap集合中的角标改成该字母在字符串中的当前角标,继续遍历,如果没有单独出行的字母,就返回特殊原创 2017-12-07 10:32:44 · 2966 阅读 · 0 评论 -
两数乘积的位数
需求:已知两正数a和b,位数分别为x和y,求二者乘积的位数。分析:设c=a*b,求c的位数,即求Math.ceil(log10c),而log10c = log10a+log10b,所以Math.ceil(log10c)=Math.ceil(log10a+log10b)。原创 2017-11-27 16:06:52 · 939 阅读 · 1 评论 -
Last Digit By Factorial Divide
需求:We are given two numbers A and B such that B >= A. We need to compute the last digit of this resulting F such that F =B! / A! where 1 10^18 (A and B are very large)样例Given A = 2, B = 4, r原创 2017-11-27 11:23:33 · 333 阅读 · 0 评论 -
java实现完全二叉树
需求:使用java构建二叉树,实现先序遍历、中序遍历、后序遍历。分析:1、分析二叉树类的属性和功能,即成员变量和成员函数成员变量: 存储所有节点值的数组和存储所有节点的集合。 二叉树的节点都有值,可以将所有的值存到数组中,并且要以节点形式存在,存到集合中。成员函数: 创建二叉树(类似于File类,创建File对象功能定义在内部);获取根节点函数原创 2017-11-30 16:59:07 · 3646 阅读 · 1 评论 -
java实现二叉树
需求:构建二叉树,实现先序遍历、中序遍历、BFS、DFS。分析:1、与完全二叉树类似,只是有些非最后一层的节点只有左儿子或者右儿子,或者没有儿子节点。仍然可以参照完全二叉树,采用宽度优先遍历将所有节点信息写到数组中,对于完全二叉树,int[]数组即可,但是对于一般的二叉树,存在一些空节点,需要用特殊字符来表示空节点,此处用"#"表示,因此需要将二叉树各节点信息存到String[]数组中。2、使用B...原创 2017-12-05 18:54:51 · 197 阅读 · 0 评论 -
最长的有效括号序列长度
需求:给定一个括号序列(只包括"("和")"),求其中最长的有效括号序列长度。分析:和判断括号序列是否是有效的算法方法一致,需要借助栈的先进后出的特性完成。1、创建boolean型数组result[],result[i]代表角标i的序列符号是否是有效序列中的一员,初始化为false。2、遍历括号序列,如果是左括号,就将左括号和其在序列中的角标存到栈中,如果是右括号,就判断栈原创 2017-12-03 14:36:18 · 1010 阅读 · 0 评论 -
子集的和
需求:Given a number n, we need to find the sum of all the elements from all possible subsets of a set formed by first n natural numbers.样例Given n = 2, return 6Possible subsets are {{1}, {2},原创 2017-11-24 10:42:15 · 613 阅读 · 0 评论 -
java中几个概念的总结
抽象 abstract,是修饰符,用来修饰类和函数。抽象就是不具体,当子类当中有些函数的声明相同,但是功能主体不同,就可以将函数声明定义成抽象方法封装在父类中,包含抽象方法的类是抽象类,抽象的父类无法创建实例对象,因为抽象方法不具体,只有当子类复写了父类中的全部抽象方法才能创建对象,才能使用抽象方法。所以抽象从某种意义上是强迫子类实现父类的抽象方法。抽象方法一定在抽象类中, 抽象类中的方法不...原创 2017-09-24 17:44:26 · 235 阅读 · 0 评论 -
二叉搜索树
需求: 给定一个二叉树的后序遍历序列,用整型数组存储序列,判断该二叉树是否是一个二叉树搜索树?分析: 二叉搜索树满足父节点的值大于其左子树的所有节点值,而小于右子树的所有节点值,就从这个特性入手。 对于二叉树的后序遍历序列,最后一个数是该二叉树的根,根据大小关系可以将前面的数字部分分为两部分,一个是左子树,其值都小于根,一个是右子树,其值都大于根。对左右子树,原创 2017-12-11 16:27:05 · 137 阅读 · 0 评论 -
java保留小数点后两位
DecimalFormatDecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地原创 2018-02-02 16:59:14 · 1736 阅读 · 0 评论 -
堆栈和队列的相互实现
需求:堆栈特点是先进后出,队列特点是先进先出。二者有一定联系,可以使用两个队列实现堆栈,也可以用两个堆栈实现队列。分析: 1、两个堆栈实现队列(有两个堆栈stack1,stack2) 添加:添加到stack1中 删除队列头部元素:如果两个堆栈都是空的,那么抛出异常。如果stack2非空,将栈顶pop,如果stack2是空的,判断stack1大小是否是1,如果是1,那么直原创 2018-02-03 22:45:01 · 2400 阅读 · 0 评论 -
二进制中的1
需求:求整数的二进制形式中1的个数。分析:求整数二进制形式中1的个数1、方法一 如果该数是0,那么直接返回0;如果不是0,就循环和1进行按位与运算,如果结果是1,说明最低位是1,那么1的个数加一,将该数右移一位,循环此过程,每次都需要判断该数是否为0,如果是0,那么就直接返回1的个数,否则继续执行。 该方法适用于正数的求解,因为正数的右移是在高位添0,不会引入多余的1。不适用于负数,因...原创 2018-02-11 17:05:00 · 716 阅读 · 0 评论 -
jump games I/II
需求I:Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Determine if yo...原创 2018-06-07 17:13:27 · 161 阅读 · 0 评论 -
Spiral Matrix I/II
需求:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.Example 1:Input:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]Output: [1,2,3,6,9,8,7,4,5]分析:...原创 2018-06-07 14:26:07 · 159 阅读 · 0 评论 -
N-Queens I/II
需求:n皇后问题,有一个n*n的棋盘,有n个皇后,要保证每个皇后不能在同一行、同一列、同一对角线,这样才不会出现冲突,求解n皇后共有多少种放置方式。分析:1、创建n*n的char型二维数组,初始化为'.',表示没有放置皇后。2、因为皇后不能在同一行,所以将皇后i放到行i,逐行确定每个皇后的位置。假设,现在要确定皇后num(num的范围是0~n-1)的位置,如果num==n,那么说明已经找到了一个可...原创 2018-06-07 10:30:27 · 459 阅读 · 0 评论 -
Group Anagrams
需求:Given an array of strings, group anagrams together.Example:Input: ["eat", "tea", "tan", "ate", "nat", "bat"],Output:[ ["ate","eat","tea"], ["nat",&原创 2018-05-21 22:14:03 · 356 阅读 · 0 评论 -
排序算法--java实现
之前总结过常见排序算法的时间复杂度、空间复杂度、是否稳定等特性,现将代码补上。代码:/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the t...原创 2018-05-21 21:00:28 · 180 阅读 · 0 评论 -
String Compression
需求:给定一个字符数组chars,由若干个字符组成,现对其进行简化,比如"aaabbcc",将其转化成"a3b2c2",如果字符个数是1,那么不需要进行简化。要求in-place,即直接修改原始字符数组。分析:1)特殊情况处理:如果字符数组是null,那么抛出参数异常;如果字符数组长度是0或者1,那么无需进行简化,直接返回数组长度即可。2)定义三个变量,字符变量ch,存储出现的字符,整型变量num...原创 2018-05-19 19:51:02 · 278 阅读 · 0 评论 -
动态规划求解路径问题
动态规划求解的两个条件: 1)最优解问题 2)大问题可以拆分成小问题,大问题的最优解包含小问题的最优解,将小问题的最优解保存起来,在求大问题最优解的时候无需重新求解,直接拿来用即可。具体问题需求一: 给定m*n矩阵,从左上角出发,到右下角,每次只能向右走或者向下走,求共有多少路径?分析: 假设路径数是f(m, n),那么第一步如果向右走,那么有f(m, n-1)种走法,如果...原创 2018-04-26 22:05:22 · 1864 阅读 · 0 评论 -
递归求解复杂的枚举问题
一、问题概述 枚举就是列举出所有的情况。数据量较小时,比较容易列举,但是随着数据量增大,如果依然一一列举,可能会出现遗漏的情况,导致出错,这时候就可以考虑使用递归的方式进行,寻找递推关系。比如先获得数据规模是n-1的所有情况,那么求n就只需要在n-1的基础上做一些修改即可,这样就大大简化了问题,但是如果递归深度较大,可能会产生内存溢出的问题。 对于枚举问题,递归是一个较容易想到的解题思...原创 2018-04-25 14:47:42 · 738 阅读 · 0 评论 -
java--多种排序算法
基本知识1、时间频度一个算法中的语句执行次数叫做语句频度或时间频度,用T(n)表示。理论上无法计算一个算法执行所需的时间,必须上机测试才能知道,但是我们不可能也没必要对每个算法都进行上机测试,我们只需要知道哪个算法运行时间长,哪个算法运行时间短即可。算法花费的时间和算法中语句执行次数成正比,哪个算法中语句执行次数多,花费时间就长,所以我们只需要知道语句执行次数就可以知道算法大致的执行时间。2、时间...原创 2018-03-10 19:32:04 · 231 阅读 · 0 评论 -
单例设计模式--java实现
单例设计模式是一种常见的软件设计模式,通过这种模式,可以保证系统中,该类只有一个实例对象。对于系统中的某些类来说,只有一个实例很重要,比如一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务。为了保证一个类只有一个实例对象,需要满足以下三个条件: 1、外界无法创建该类对象,所以该类对象的构造函数是私有的,外界无法使用。 2、既然外界无法创建该类对象,并且要保证该类只有一个实例对...原创 2018-03-15 20:18:49 · 230 阅读 · 0 评论 -
数组的第k大值
需求:求数组nums中的第k大数,即从大到小排列的第k个数字。分析:1、思路一借助最小堆求解,创建一个大小是k的最小堆(优先队列),遍历数组,当最小堆大小小于k时,存储数组元素,否则,比较数组元素和队列头元素,如果比队列头元素大,就替换队列头元素,否则继续遍历,最终返回队列头部元素。2、思路二借助快排的思想,每次排序,都能将基准数归位,假设归位角标是i,将基准数和第k大的数的位置进行比较,如果相同...原创 2018-02-19 23:42:08 · 546 阅读 · 0 评论 -
删除链表中的重复节点
需求:给定一个链表,将其中重复的节点删除,不保留重复的节点。分析:1、思路一 1)创建map集合,遍历链表节点,存储节点值和其出现的次数 2)遍历map集合,将其中出现次数是1的节点连起来,输出头结点代码:import java.util.*;//链表节点类class ListNode{ int val; ListNode next; ListNode(int val){ t...原创 2018-02-18 22:38:52 · 392 阅读 · 0 评论 -
动态规划or贪心算法--剪绳子/切割杆
需求一: 剪绳子,将长度为n的绳子剪成若干段,求各段长度乘积的最大值分析: 1、动态规划 设f(n)代表长度为n的绳子剪成若干段的最大乘积,如果第一刀下去,第一段长度是i,那么剩下的就需要剪n-i,那么f(n)=max{f(i)f(n-i)}。而f(n)的最优解对应着f(i)和f(n-i)的最优解,假如f(i)不是最优解,那么其最优解和f(n-i)乘积肯定大于f(n)的最优解,...原创 2018-02-12 12:06:41 · 9355 阅读 · 4 评论 -
first missing positive
需求:Given an unsorted integer array, find the first missing positive integer.ExampleGiven [1,2,0] return 3,and [3,4,-1,1] return 2.分析:比较简单的思路是对数组进行排序,然后遍历其中的元素,找到相邻元素差值大于1的两数,说明这两数之间有丢失的整数,求该区间中丢失的最小正整...原创 2017-12-29 10:59:36 · 137 阅读 · 0 评论 -
平衡二叉树
需求: 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二原创 2017-12-11 11:10:06 · 182 阅读 · 0 评论 -
二叉树的逐层遍历--java实现
需求一: 逐层遍历二叉树并输出,每一层占一行。分析:思路一: 1、逐层遍历二叉树也是BFS遍历二叉树,因此数据结构选择队列。 2、需要用两个变量存储当前层待遍历的节点个数以及下一行的节点个数。 3、将头结点加入队列尾,当队列不是空的,就移除队列头部元素并输出,并将其儿子节点加入队列尾,当前层待遍历节点个数减一,更新下一层节点个数。 4、当当原创 2017-12-10 17:01:02 · 1769 阅读 · 0 评论 -
java两链表求和
需求: 两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 比如:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null思路: 遍历两个链表,其实就是遍历每个节点,当两个节点至少有一个不是null原创 2017-10-28 20:59:23 · 1024 阅读 · 0 评论 -
java中进制转换的几种实现方式
进制转换java提供了进制转换的工具,但是通常用来处理十进制和二进制、八进制、十六进制之间的转换。1、十进制转成二进制、八进制、十六进制 String toBinaryString(int num) String toOctalString(int num) String toHexString(int num)2、其他进制数转成十进制 st原创 2017-10-28 16:28:54 · 2386 阅读 · 0 评论 -
Java single number
需求:给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。思路:1、使用集合的方法对于涉及到数组中重复元素的问题,可以考虑将数组中元素和角标存到HashMap中,然后遍历数组,看数组元素在Map集合中对应的值和该元素在数组中的角标是否相同,如果相同就直接返回该数,如果不同,就把Map集合中该元素对应的值变成该元素在数组中的角标。2、使用指针原创 2017-09-30 09:17:59 · 229 阅读 · 0 评论 -
java中的File
File IO流只能操作文件中的数据,而无法操作文件,比如创建、删除文件等操作无法完成,这些方法都封装在File类中1、字段 static String separator//名称分隔符,linux中是/,Windows中是\ static String pathSeparator//路径分隔符,linux中是:,Windows中是; 都可跨平台2、构造函数 File...原创 2017-09-30 19:16:32 · 260 阅读 · 0 评论 -
String和StringBuffer
一、String类--java.lang包1、获取 1)int length();//获取字符串长度,此处是个方法,而数组的长度是属性 2)char charAt(int index);//获取角标index处的字符 3)int indexOf(int ch);//正向索引,返回字符ch第一次出现的角标,如果没有就返回-1 4)int indexOf(int ch, ...原创 2017-09-30 17:00:59 · 278 阅读 · 0 评论 -
java中的基本类
基本数据类型对象包装类,将基本数据类型封装成对象。体系Object |--Number |--Byte |--Double |--Float |--Integer |--Long |--Short |--Boolean |--CharacterNumber子类方法1、Number...原创 2017-09-30 18:47:25 · 227 阅读 · 0 评论