无效的目标发行版:xx(IDEA)
无效的目标发行版:xx(IDEA) 在启动maven项目的时候,偶尔会碰到这样的报错,原因是JDK版本不匹配,这里为11为例可以这样解决:
1.点击IDEA编辑器左上角File,点击Project Structure
2.点击左侧Project Settings一栏的Project,并且点击右边SDK,将SDK更换为对应正确版本
3.点击左侧Project Settings一栏的Modules,在中间选中模块(所有模块都要设置一遍!),点击右图的Sources,在Language Level选则正确版本。
4.点击Dependencies,将Module SDK修改为对应版本
记得将所有模块都设置一遍!!!
5.点击apply和ok
6.进入Settings,点击左侧的Build,Execution,Deployment,点击Compiler,点击java compiler, 将右侧的Project bytecode version和Per-module bytecode version设置成对应版本
7.点击apply和ok###8.按ctrl+shift+r快捷键,打 ...
剑指offer JZ83 剪绳子(进阶版)
描述剑指offer JZ83 剪绳子(进阶版) 给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],…,k[m] 。请问 k[1]k[2]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。
由于答案过大,请对 998244353 取模。
前置思路数学原理:
图片截取于牛客题解官题解思路
方法一:快速幂法 思路:由于我们知道运算规则,只需要分三种情况:1.长度除以3余数为0。 2.长度除以3余数为1。 3.长度除以3余数为2.。三种情况分别求解即可。但是由于数字过大,如果直接用Math.pow()进行幂运算的话,会导致运超时。所以我们需要一个新的方法来进行幂运算。 快速幂运算原理:比如我们需要求3的5次幂,我们可以将5看作二进制数101,那么容易看出来,第几次位上有1,就代表3的几次幂,最后将各个位数的结果相乘得到最终结果。比如 ...
剑指offer 数字序列中某一位的数字
描述剑指offer JZ44 数字序列中某一位的数字 数字以 0123456789101112131415… 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
方法一:通过减去位数计算 思路:由于数字之间的差异点是在位数,所以我们可以把位数不同的数字分组,计算出这个位数所有数字的位数个数,然后计算n对应的位数区间,知道了n在哪个位数区间就可以定位到具体数字。 实现技巧 :1-9,一位数总共9个,10-99,两位数一共90个,100-999,三位数一共900个。可以发现,同一位数的个数=这个位数的起始数字9,比如二位数的个数 =109=90。得到数字的个数之后,再将个数乘以位数,即可得到这个位数的所有位数之和,比如两位数位数和就等于90*2=180; 代码实现与相应解释说明:
12345678910111213141516171819202122232425262728293031import java.util. ...
剑指offer 数组中的逆序对
描述剑指offer JZ51 数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007
方法一:归并 思路:通过归并处理,具体细节解释看注释 代码实现与相应解释说明:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ //用于在归并时拷贝数组数据,便于排序。 i ...
剑指offer 字符串的排列
描述剑指offer JZ38 字符串的排列输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。
方法:递归,回溯 思路:通过递归回溯,遍历出所有字符组合,并且去重 123456789101112131415161718192021222324252627282930313233343536373839404142434445public class Solution { //用于储存结果 static ArrayList<String> list = new ArrayList<>(); //用于标记数字是否已使用 static boolean[] flags; //目标字符串生成的数组,便于遍历 static char[] strs; //用于拼接字符串,生成单个结果 static StringBuffer sb = new StringBu ...
剑指offer 序列化二叉树
描述剑指offer JZ37 序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。
二叉树的序列化(Serialize)是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树等遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#)
二叉树的反序列化(Deserialize)是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
方法一:使用队列,通过层序遍历来序列化和 思路:1.序列化二叉树将根节点的值加入字符串,将根节点的左节点以及右节点分别入队,循环知道遍历所有节点。2.反序列化二叉树同样使用队列,将字符串中的值依此取出,创造节点,找到其父节点建立关系,并且放入队列中,依此类推。代码实现:
1234567891011121314151617181920212223242526272829303132333435363738394041424 ...
剑指offer 二叉搜索树的后序遍历序列
描述剑指offer JZ33 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。保证节点上的值各不相同
提示:1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。2.该题我们约定空树不是二叉搜索树3.后序遍历是指按照 “左子树-右子树-根节点” 的顺序遍历
方法一:逆序遍历二叉树数组,使用栈辅助判断 思路:由于在后序遍历中,我们很难判断第一个节点是左节点还是右节点,不便于后续判断,但是最后一个节点一定是根节点,所以从数组末尾逆序遍历判断比较便利。该二叉搜索树是后序遍历,那从末尾数字进行逆序遍历,就是按照根节点===>右节点===>左节点的顺序,在逆序遍历数组过程中,如果后一个数字大于前一个数字,那么后一个数字就是前一个数字的右节点,如果后一个数字小于前一个数字,那么后一个数字就是前一个数字或其祖先节点的左节点,每次找到一个左节点,我们就遍历以这个左节点为根节 ...
剑指offer 顺时针打印矩阵
描述剑指offer JZ29 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] 则依次打印出数字[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10] 数据范围:0 <= matrix.length <= 1000 <= matrix[i].length <= 100
方法一:设置方向的优先级,并且单独考虑特殊情况进行遍历 思路:由于需要顺时针遍历矩阵,我们可以直观想到方向的优先级:右、下、左、上。我们可以通过标记已经遍历过的数字,每次都按顺序判断这四个方位,在前一个行不通时才会走下一个,大体实现顺时针遍历。但是存在一种特殊情况,就是在需要向上遍历的时候,由于是需要先判断右方向,所以遍历方向会向右走而不向上,这个时候我们可以在判断四个方向之前再加入一个条件:即在右方和上方都可通行的时候,优先向上走,即可解决。 代码实现 ...
剑指offer JZ26 树的子结构
描述剑指offerJZ26 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构
数据范围:0 <= A的节点个数 <= 100000 <= B的节点个数 <= 10000
方法一:递归遍历判断 思路:我们可以使用两个递归遍历实现,第一个递归遍历父树root1,让root1中每一个节点都实现第二个递归,判断以当前节点为根节点的树中,是否包含子树root2。注意,root2可能在root1的中间部分,并不是只能在尾部 代码实现:
1234567891011121314151617181920212223242526272829303132333435363738394041import java.util.*;/**public class TreeNode { int val = 0; TreeNode left = null; ...
剑指offer JZ20题 表示数值的字符串
描述剑指offerJZ20题 表示数值的字符串
请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。
科学计数法的数字(按顺序)可以分成以下几个部分:1.若干空格2.一个整数或者小数3.(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个整数(可正可负)4.若干空格
小数(按顺序)可以分成以下几个部分:1.若干空格2.(可选)一个符号字符(’+’ 或 ‘-‘)3. 可能是以下描述格式之一:3.1 至少一位数字,后面跟着一个点 ‘.’3.2 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字3.3 一个点 ‘.’ ,后面跟着至少一位数字4.若干空格
整数(按顺序)可以分成以下几个部分:1.若干空格2.(可选)一个符号字符(’+’ 或 ‘-‘)3. 至少一位数字4.若干空格
例如,字符串[“+100”,”5e2”,”-123”,”3.1416”,”-1E-16”]都表示数值。但是[“12e”,”1a3.14”,”1.2.3”,”+-5”,”12e+4.3”]都不是数值。
提示:1.1 <= str.length <= ...