自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 NC50链表中的节点每k个一组翻转

描述将给出的链表中的节点每 k个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。题解:链表的翻转可以使用栈这个结构,化解引用复杂变化的问题。import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** .

2022-02-17 20:13:09 112

原创 NC49 最长的括号子串

描述给出一个长度为 n 的,仅包含字符 '(' 和 ')' 的字符串,计算最长的格式正确的括号子串的长度。题目解法:使用栈结构对问题进行求解import java.util.*;public class Solution { /** * * @param s string字符串 * @return int整型 */ public int longestValidParentheses (String s) { /

2022-02-17 18:24:08 494

原创 NC48 在旋转过的有序数组中寻找目标值

描述有一个长度为 n 的按严格升序排列的整数数组 nums ,在实行 search 函数之前,在某个下标 k 上进行旋转,使数组变为[nums[k],nums[k+1],.....,nums[nums.length-1],nums[0],nums[1],.......,nums[k-1]]。给定旋转后的数组 nums 和一个整型 target ,请你查找 target 是否存在于 nums 数组中并返回其下标(从0开始计数),如果不存在请返回-1。题目解法:将数列分为两列,前一列采用遍历策略,后

2022-02-17 11:19:34 530

原创 NC47 数独

描述请编写一个程序,给数独中的剩余的空格填写上数字空格用字符'.'表示假设给定的数独只有唯一的解法题目解法:利用递归回溯的思想进行求解import java.util.*;public class Solution { public void solveSudoku(char[][] board) { get_ans(board); } public boolean get_ans(char[][] board) { f

2022-02-16 22:22:18 627

原创 NC46 加起来和为目标值的组合(二)

描述给出一组候选数 c 和一个目标数 t,找出候选数中起来和等于 t 的所有组合。c 中的每个数字在一个组合中只能使用一次。题解:利用递归回溯求解。如果用暴力遍历会超时。import java.util.*;public class Solution { public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) { Arrays.sort(num.

2022-02-07 20:30:32 378

原创 NC45 实现二叉树先序,中序和后序遍历

描述给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。题解:不需要预先设置num数组存储数据,可以采用链表结构存储数据,后再设置数组。public class Solution { /** * * @param root TreeNode类 the root of binary tree * @return int整型二维数组 */ public int[][] threeOrders (TreeNode root) {

2022-02-07 12:40:53 645

原创 NC44 通配符匹配

描述请实现支持'?'and'*'.的通配符模式匹配'?' 可以匹配任何单个字符。'*' 可以匹配任何字符序列(包括空序列)题解:利用双指针进行标记,如果s.charAt(i)==p.charAt(j)||p.charAt(j)=='?'则j++,i++;否则如果p.charAt(j)=='*',则对jstart,istart进行标记;否则如果jstart>-1 i=++istart;j=jstart+1;否则如果不匹配;最后还需判断两条字符串是否都已经遍历完成,如果p字符串最后还有非‘*

2022-02-07 11:43:59 1167

原创 NC43没有重复项数字的全排列

描述给出一组数字,返回该组数字的所有排列题解:使用递归的方法,暴力求解public class Solution { boolean mark[]; public ArrayList<ArrayList<Integer>> permute(int[] num) { mark=new boolean[num.length]; LinkedList<Integer> temp=new LinkedList<&

2022-02-07 10:48:12 220

原创 NC42有重复项数字的全排列

描述给出一组可能包含重复项的数字,返回该组数字的所有排列。结果以字典序升序排列。题解:也就是判断是否略过下一个数组元素。当下一个元素和上一个元素相同且上一个元素已被访问回溯,则掠过。关键bug在于不要使用ArrayList<Integer>,这种情况下,会返回未知的错误,应该要使用LinkedList<Integer>。具体原因,我也还没有搞清楚,来日方长吧。public class Solution { boolean mark[]; ArrayLis

2022-02-06 23:34:31 233

原创 NC41 最长无重复子数组

描述给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组题解:使用hashset元素不重复的特性,遍历各个子数组,求得最大长度public class Solution { /** * * @param arr int整型一维数组 the array * @return int整型

2022-02-06 20:31:30 276

原创 NC40 两个链表生成相加链表

描述假设链表中每一个节点的值都在 0 - 9之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。题解:利用堆栈这个特殊结构,对数据进行处理,使其可以从末尾开始相加,并用carry标志位存储进位标志。public class Solution { /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类.

2022-02-06 17:35:40 274

原创 NC39 N皇后问题

描述N皇后问题是指在 n * n的棋盘上要摆 n个皇后,要求:任何两个皇后不同行,不同列也不在同一条斜线上,求给一个整数 n,返回 n皇后的摆法数。题解:首先要明白用数学标记正斜线(i-j)和反斜线(i+j),后利用hashset的特性,判断落子是否合理,利用递归依次判断全部的区域。public class Solution { /** * * @param n int整型 the n * @return int整型 */ ...

2022-02-06 12:31:44 270

原创 NC38 螺旋矩阵

描述给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。题解:将整个过程分成四个部分,向左,向下,向右,向上处理。public class Solution { public ArrayList<Integer> spiralOrder(int[][] matrix) { ArrayList<Integer> list=new ArrayList<>(); if(matrix.length==

2022-02-06 11:27:55 235

原创 NC37 合并区间

描述给出一组区间,请合并所有重叠的区间。请保证合并后的区间按区间起点升序排列。题目解法:用一个新的可变数组存储新生成的数据即可。public class Solution { public ArrayList<Interval> merge(ArrayList<Interval> intervals) { Collections.sort(intervals,new Comparator<Interval>()

2022-02-05 17:47:41 6074 1

原创 NC36 在两个长度相等的排序数组中找到上中位数

描述给定两个递增数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。上中位数:假设递增序列长度为n,为第n/2个数题解:利用temp存储变量,依次找到两个数组中的较小值,并用count计数,当count==n时,返回temp。public class Solution { /** * find median in two sorted array * @param arr1 int整型一维数组 the array1 * @p

2022-02-05 17:10:20 204

原创 NC35 编辑距离(二)

描述给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。题解:利用动态规划的思想,dp[i][j]为将str1[0:i-1]处理成str2[0:j-1]的意思str1[i]==str2[j]时,dp[i][j]=dp[i-1][j-1]+rcstr1[i]!=str2[j]时,dp[i][j]=dp[i-1][j]+dc或dp[i][j]=dp[i][j-1]+ic取其中最小值作为转移代价。

2022-02-05 16:34:22 694

原创 NC34 求路径

描述一个机器人在m×n大小的地图的左上角(起点)。机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?备注:m和n小于等于100,并保证计算结果在int范围内题目解法:利用动态规划的思想,发现其中的数学规律,因为迷宫只能往下往右走,故除第一行和第一列为1以外,其余都为左边一格和右边一格的和值。public class Solution { /** * * @param m int整型

2022-02-04 16:38:36 593

原创 NC33 合并两个排序的链表

描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0≤n≤1000要求:空间复杂度O(1),时间复杂度O(n)题解:当node2的节点大于node1的节点小于node1.next的节点时,插入节点。否则指针后移,bug出现在末尾指针的处理,需要判断node.next是否存在。在while结束后,还需要判断所有节点是否已经全部嵌入public class Solution { public ListNode Merge(L..

2022-02-04 16:22:25 369

原创 NC32 求平方根

描述实现函数 int sqrt(int x).计算并返回 x 的平方根(向下取整)要求:空间复杂度 O(1),时间复杂度 O(logx)题解:利用二分法求解,注意利用乘法对数进行验证,可能会导致数据溢出,而使用除法,则要注意除数不为0public class Solution { /** * * @param x int整型 * @return int整型 */ public int sqrt (int x) {

2022-02-04 15:40:39 245

原创 NC31 第一个只出现一次的字符

描述在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)数据范围:0≤n≤10000,且字符串只有字母组成。要求:空间复杂度 O(n),时间复杂度 O(n)题目解法:利用hashmap的特性进行求解,以字符出现的频数作为键值进行存储。后按照字符串的顺序依次遍历hashmap,直到找到第一个频数为1的字符。import java.util.HashMap;public class Solution { pub

2022-02-04 15:04:06 413

原创 NC30 缺失的第一个正整数

描述给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数进阶: 空间复杂度 O(1),时间复杂度 O(n)题目解法:利用hashset的快速查找特性,确定存在的最小正整数 public int minNumberDisappeared (int[] nums) { // write code here Set<Integer> valueset=new HashSet<>(); for(int

2022-02-03 22:39:58 224

原创 NC29 找到目标数

描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。题目·求解思路:利用矩阵大小具有递增性,从左下角开始检索,如果值为target,则找到,t

2022-02-03 22:28:30 81

原创 NC28 最小覆盖子串

描述给出两个字符串 s和 t,要求在 s中找出最短的包含 t中所有字符的连续子串。题目解法:利用哈希表进行求解,并利用Hashmap的getOrDefault()函数,对hashmap中的key值进行统计,并记得要考虑T模板中有多个重复值的情况。public class Solution { /** * * @param S string字符串 * @param T string字符串 * @return string字符串...

2022-02-03 21:53:55 819

原创 NC27 集合的所有子集(一)

描述现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列给出的解集中不能出现重复的元素addall(list)与add(list)函数的区别,addall()函数将list函数中所有单个元素分别添加,add()函数将list整个函数作为一个整体添加。题解:将已生成的列表作为底,依次往里面添加元素形成新的元素集。public class Solution { public ArrayList<ArrayList<Integer

2022-02-03 19:36:40 281

原创 NC26 括号生成

描述给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。例如,给出n=3,解集为:"((()))", "(()())", "(())()", "()()()", "()(())"题目详解:对题目规则的归纳很重要,首先,左括号的数量要始终大于等于右括号的数量。两括号的数量要小于题目所给值。public class Solution { /** * * @param n int整型 * @return string字符串Array

2022-02-03 18:54:39 6662

原创 NC24 删除有序链表中重复的元素-II

描述给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。题目求解技巧:可以使用虚拟的头结点,减少代码复杂度,可以使用boolean变量来记录某一过程是否进行。一定要想清楚再开始写代码。ublic class Solution { /** * * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates .

2022-02-01 23:00:57 91

原创 NC25 删除有序链表中重复的元素-I

描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次题目求解:利用虚拟头节点,减少处理过程的复杂度;注意空节点是没有next节点的public class Solution { /** * * @param head ListNode类 * @param x int整型 * @return ListNode类 */ public ListNode partition (ListNode .

2022-02-01 22:13:14 161

原创 NC23 划分链表

描述给出一个长度为 n的单链表和一个值 x,单链表的每一个值为 listi,请返回一个链表的头结点,要求新链表中小于 x的节点全部在大于等于 x的节点左侧,并且两个部分之内的节点之间与原来的链表要保持相对顺序不变。题目解法:先找到链表的尾节点和链表的长度,判断节点数值是否大于给定值,是就插入到尾处。可以使用虚拟的头结点对翻转过程进行简化,链表问题要考虑,极端值情况public class Solution { /** * * @param head ...

2022-02-01 21:46:26 149

原创 NC21 链表内指定区间反转

描述将一个节点数为 size 链表 m位置到n 位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。题目解法:就是链表的处理转换,记得要考虑各种各样的情况,用极端值进行设计public class Solution { /** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ p...

2022-02-01 21:00:13 269

原创 NC22 合并两个有序的数组

描述给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组题解:先将两个数组合并后再排序。public class Solution { public void merge(int A[], int m, int B[], int n) { for(int i=0;i<B.length;i++) { A[m+i]=B[i]; } Array

2022-02-01 17:13:03 83

原创 NC20 数字字符串转化成IP地址

描述现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回["255.255.22.135", "255.255.221.35"]. (顺序没有关系)数据范围:字符串长度0 \le n \le 120≤n≤12要求:空间复杂度O(n!)O(n!),时间复杂度O(n!)O(n!)注意:ip地址是由四段数字组成的数字序列,格式如 "x.x.x.x",其中 x 的范围应当是 [0,255]。...

2022-02-01 16:54:47 1692

原创 NC19 连续子数组的最大和

描述输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。题解:利用动态规划的思想,将累加和与下一个数值进行比较,取较大值,每次都保存最大和值。public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int ans=0; int max=array[0]; for(int i=0;i<a

2022-02-01 12:26:44 334

原创 NC18 顺时针旋转矩阵

描述有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。数据范围:0 < n < 300,矩阵中的值满足0≤val≤1000要求:空间复杂度 O(n^2),时间复杂度 O(n^2)题解:将矩阵看成是一个一个列向量,进行翻转可得。public class Solution { public int[][] rotateMatrix(int[][] mat, int n) {

2022-02-01 12:14:06 325

原创 NC17 最长回文子串

描述对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。数据范围: 1≤n≤1000要求:空间复杂度O(1),时间复杂度O(n^2)进阶: 空间复杂度O(n),时间复杂度O(n)题目解法:回文子串右两种类型,一种是奇数长度,一种是偶数长度,采用两个循环分别求解,最后取最大值,作为答案返回。public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直...

2022-02-01 11:27:50 655

原创 NC16 对称的二叉树

描述给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)题目思路:刚开始想要采用中序遍历是否为镜像对称的方法进行判断,但是后来发现某些二叉树中序输出是对称的,但是其本身是不对称的,必须要将二叉树的空缺位置填补上,才能使用这种方法。后面还是采用递归的方法进行求解,将判断过程分解称几个小过程。当左右子树都为空时其为对称,值不相等时,不对称,左子树或右子树为空时则不对称。后再比较左子树的右节点的右子树的左节点,左子树的左节点和右子树的右节点。public class Solution {

2022-01-31 20:12:45 153

原创 NC15 求二叉树的层序遍历

描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)题目解法:没有什么特别之处,就是利用BFS算法思想对树进行求解。public class Solution { /** * * @param root TreeNode类 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer&g

2022-01-31 19:03:01 60

原创 NC14 按之字形顺序打印二叉树

描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0≤n≤1500,树上每个节点的val满足∣val∣<=100要求:空间复杂度:O(n),时间复杂度:O(n)思考过程:利用BFS进行层序遍历二叉树(利用队列元素),而后输出。public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot)

2022-01-31 18:21:20 43

原创 NC13 求给定二叉树的最大深度

描述求给定二叉树的最大深度,深度是指树的根节点到任一叶子节点路径上节点的数量。最大深度是所有叶子节点的深度的最大值。(注:叶子节点是指没有子节点的节点。)求解过程中,遇到最主要的问题在于,没有理解清楚递归的含义,片面开始码,导致bug较多。public class Solution { /** * * @param root TreeNode类 * @return int整型 */ public int maxDepth

2022-01-31 17:03:24 144

原创 NC12 重建二叉树

描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。题目遇到的问题:在于复制数组时,忘记相应的函数。arrays.copyofRange().public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] vin) { if(pre.length==0 || vin.length==0) return

2022-01-31 16:24:02 543

原创 NC11 将升序数组转化为平衡二叉搜索树

描述给定一个升序排序的数组,将其转化为平衡二叉搜索树(BST).平衡二叉搜索树指树上每个节点 node 都满足左子树中所有节点的的值都小于 node 的值,右子树中所有节点的值都大于 node 的值,并且左右子树的节点数量之差不大于1数据范围:0≤n≤10000,数组中每个值满足 0∣val∣≤5000进阶:空间复杂度O(n),时间复杂度O(n)该题时数据结构中比较基础的题目,但是在java语法上出现了一些错误,比如Thread root=new Thread(root.va...

2022-01-30 21:37:30 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除