JZ48最长不含重复字符的子字符串描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1输入:"abcabcbb"返回值:3说明:因为无重复字符的最长子串是"abc",所以其长度为3。方法1思路维护一个数组,想里面添加元素,直至出现第一个重复元素位置,计算数组长度作为一次结果将每一个元素都作为开始元素,利用两次for,将全部不重复子字符串全部计算出来,取出最大数代码intmax=Integer.MIN_VALUE;Listtmp=newArrayList();if(s==null&&s.length()==0)return0;for(inti=0;i方法2思路
JZ48最长不含重复字符的子字符串描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1输入:"abcabcbb"返回值:3说明:因为无重复字符的最长子串是"abc",所以其长度为3。方法1思路维护一个数组,想里面添加元素,直至出现第一个重复元素位置,计算数组长度作为一次结果将每一个元素都作为开始元素,利用两次for,将全部不重复子字符串全部计算出来,取出最大数代码intmax=Integer.MIN_VALUE;Listtmp=newArrayList();if(s==null&&s.length()==0)return0;for(inti=0;i方法2思路
JZ49丑数题目我们先看到题目,把只包含质因子2、3和5的数称作丑数(UglyNumber)。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。方法1:质因数分解(暴力)思路算法实现一个很朴素的做法从1~n每次+1,一直枚举,直到找到地N个丑数为止那么还有一个待解决的问题,如何判断当前数字是不是丑数呢?我们总结一下丑数的性质:只能分解为2,3,5的如干次幂相乘的数,即设第个丑数为,则res=2*x+3*y+5*z那么我们只需要通过质因数分解,判断他分解2,3,5后,是否为1,如果为1,则说明没有其他的因数,否则则有其他因数,那么他就不是一个丑数问题当输入数过大
JZ49丑数题目我们先看到题目,把只包含质因子2、3和5的数称作丑数(UglyNumber)。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。方法1:质因数分解(暴力)思路算法实现一个很朴素的做法从1~n每次+1,一直枚举,直到找到地N个丑数为止那么还有一个待解决的问题,如何判断当前数字是不是丑数呢?我们总结一下丑数的性质:只能分解为2,3,5的如干次幂相乘的数,即设第个丑数为,则res=2*x+3*y+5*z那么我们只需要通过质因数分解,判断他分解2,3,5后,是否为1,如果为1,则说明没有其他的因数,否则则有其他因数,那么他就不是一个丑数问题当输入数过大
JZ51数组中的逆序对题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出Pmod1000000007方法1:暴力思路算法实现两个for循环,如果前面的数大于后面的计数加1即可问题当输入数过大时,需要的时间会很长,所以此方法不行代码packagemid.JZ51数组中的逆序对;importjava.util.ArrayList;publicclassSolution{publicintInversePairs1(int[]array){intk=1000000007;
JZ51数组中的逆序对题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出Pmod1000000007方法1:暴力思路算法实现两个for循环,如果前面的数大于后面的计数加1即可问题当输入数过大时,需要的时间会很长,所以此方法不行代码packagemid.JZ51数组中的逆序对;importjava.util.ArrayList;publicclassSolution{publicintInversePairs1(int[]array){intk=1000000007;
JZ54二叉搜索树的第k个节点题目给定一棵结点数为n二叉搜索树,请找出其中的第k小的TreeNode结点值。返回第k小的节点值即可不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1保证n个节点的值不一样思路算法实现根据二叉搜索树的性质,左子树的元素都小于根节点,右子树的元素都大于根节点。因此它的中序遍历(左中右)序列正好是由小到大的次序,因此我们可以尝试递归中序遍历,也就是从最小的一个节点开始,找到k个就是我们要找的目标。具体做法:step1:设置全局变量count记录遍历了多少个节点,res记录第k个节点。step2:另写一函数进行递归中序遍历,当节点为空或者超过k时,结
JZ54二叉搜索树的第k个节点题目给定一棵结点数为n二叉搜索树,请找出其中的第k小的TreeNode结点值。返回第k小的节点值即可不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1保证n个节点的值不一样思路算法实现根据二叉搜索树的性质,左子树的元素都小于根节点,右子树的元素都大于根节点。因此它的中序遍历(左中右)序列正好是由小到大的次序,因此我们可以尝试递归中序遍历,也就是从最小的一个节点开始,找到k个就是我们要找的目标。具体做法:step1:设置全局变量count记录遍历了多少个节点,res记录第k个节点。step2:另写一函数进行递归中序遍历,当节点为空或者超过k时,结
JZ56数组中只出现一次的两个数字题目一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字思路算法实现既然有两个数字只出现了一次,我们就统计每个数字的出现次数,利用哈希表的快速根据key值访问其频率值。具体做法:step1:遍历数组,用哈希表统计每个数字出现的频率。step2:然后再遍历一次数组,对比哈希表,找到出现频率为1的两个数字。step3:最后整理次序输出。代码packagemid.JZ56数组中只出现一次的两个数字;importjava.util.*;publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿
JZ56数组中只出现一次的两个数字题目一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字思路算法实现既然有两个数字只出现了一次,我们就统计每个数字的出现次数,利用哈希表的快速根据key值访问其频率值。具体做法:step1:遍历数组,用哈希表统计每个数字出现的频率。step2:然后再遍历一次数组,对比哈希表,找到出现频率为1的两个数字。step3:最后整理次序输出。代码packagemid.JZ56数组中只出现一次的两个数字;importjava.util.*;publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿