自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (2)
  • 收藏
  • 关注

原创 leetcode-----给定一个值n,请生成所有的存储值1...n.的二叉搜索树(BST)的结。.例如: 给定n=3,你的程序应该给出下面五种不同的二叉搜索树(BST)

题目描述给定一个值n,请生成所有的存储值1...n.的二叉搜索树(BST)的结构例如:给定n=3,你的程序应该给出下面五种不同的二叉搜索树(BST) 1 3 3 2 1↵ / / / ↵ 3 2 1 1 3 2↵ / / ↵ 2 1 2

2020-07-14 12:04:19 348

原创 leetcode----给定一棵任意二叉树,填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。

题目描述继续思考"Populating Next Right Pointers in Each Node".这道题给定一个二叉树 struct TreeLinkNode {↵ TreeLinkNode *left;↵ TreeLinkNode *right;↵ TreeLinkNode *next;↵ }填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。初始时,所有的next指针都为NULL。

2020-07-14 11:59:50 789

原创 leetcode----假设你有一个数组,其中第i个元素表示某只股票在第i天的价格。 设计一个算法来寻找最大的利润。你可以完成任意数量的交易.

题目描述假设你有一个数组,其中第i个元素表示某只股票在第i天的价格。设计一个算法来寻找最大的利润。你可以完成任意数量的交易(例如,多次购买和出售股票的一股)。但是,你不能同时进行多个交易(即,你必须在再次购买之前卖出之前买的股票)。public int maxProfit (int[] prices) { // write code here if(prices.length==0) return 0; int maxpro = 0;

2020-07-14 10:37:18 2729

原创 leetcode----假设你有一个数组,其中第i个元素是某只股票在第i天的价格。

题目描述假设你有一个数组,其中第i个元素是某只股票在第i天的价格。如果你最多只能完成一笔交易(即买一股和卖一股股票),设计一个算法来求最大利润。 public int maxProfit (int[] prices) { // 最便宜的时候买,最贵的时候卖,并且买在前,卖在后 if(prices.length==0) return 0; int min=prices[0],maxP=0; for(int i=1;i<pr

2020-07-14 10:21:20 4124

原创 leetcode---给定一个完美二叉树,填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。 初始时,所有的next指针都为NULL

题目描述给定一个二叉树 struct TreeLinkNode {↵ TreeLinkNode *left;↵ TreeLinkNode *right;↵ TreeLinkNode *next;↵ }填充所有节点的next指针,指向它右兄弟节点。如果没有右兄弟节点,则应该将next指针设置为NULL。初始时,所有的next指针都为NULL注意:你只能使用常量级的额外内存空间 可以假设给出的二叉树是一个完美的二叉树(即,所有叶子节点都位于同

2020-07-14 08:31:01 626

原创 leetcoe-----判断给定的二叉树是否是平衡的

题目描述判断给定的二叉树是否是平衡的在这个问题中,定义平衡二叉树为每个节点的左右两个子树高度差的绝对值不超过1的二叉树public boolean isBalanced (TreeNode root) { // write code here if(root==null){ return true; } if(root.left==null && root.right==null){

2020-07-14 06:08:14 133

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

题目描述求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。int ldep = 0,rdep = 0; public int maxDepth (TreeNode root) { if(root==null){ return 0; }else if(root.left==null && root.right==null){ return 1;

2020-07-13 11:39:49 416

原创 leetcode-----给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)

题目描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读我们用如下方法将二叉树序列化:二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。例如:上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".public ArrayList<ArrayList<Intege

2020-07-13 11:29:37 2112

原创 leetcode-----给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)?

题目描述给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)?例如给定 n= 3, 有五种不同的二叉搜索树(BST)//二叉搜索树(二叉排序树): // 1)左子树上的所有节点的值均小于根节点的值 ;2)右子树上所有节点的值均大于根节点的值。 public int numTrees (int n) { if(n==0){ return 1; } int[] f = new int[n+.

2020-07-13 11:05:20 1187

原创 leetcode------给出一棵二叉树,返回这棵树的中序遍历

题目描述给出一棵二叉树,返回这棵树的中序遍历例如:给出的二叉树为{1,#,2,3},返回[1,3,2].备注:递归的解法太没有新意了,你能用迭代的方法来解这道题吗?如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读我们用如下方法将二叉树序列化:二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。例如:上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".方法一:递归遍历 ArrayL.

2020-07-13 08:53:42 686

原创 leetcode-----给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。

题目描述给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值public boolean isSameTree (TreeNode p, TreeNode q) { //使用递归 if(p==null && q==null) return true; if(p==null || q==null) r

2020-07-13 07:32:06 527

原创 leetcode------删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次

题目描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表为1->1->2,返回1->2.给出的链表为1->1->2->3->3,返回1->2->3.public ListNode deleteDuplicates (ListNode head) { if(head==null || head.next==null){ return head

2020-07-12 11:47:09 1174

原创 leetcode-----现在有一个包含n个物体的数组,其中物体颜色为颜色为红色、白色或蓝色,请对这个数组进行排序,让相同颜色的物体相邻,颜色的顺序为红色,白色,蓝色。

题目描述现在有一个包含n个物体的数组,其中物体颜色为颜色为红色、白色或蓝色,请对这个数组进行排序,让相同颜色的物体相邻,颜色的顺序为红色,白色,蓝色。我们用0,1,2分别代表颜色红,白,蓝注意:本题要求你不能使用排序库函数扩展:一个非常直接的解法是两步的计数排序的算法首先:遍历一遍数组,记录0,1,2的数量,然后重写这个数组,先将0写入,再将1写入,再将2写入你能给出一个只用一步,并且能在常数级空间复杂度解决这个问题的算法吗? public void sortColor

2020-07-12 11:18:03 599

原创 leetcode-----给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。

题目描述给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。拓展:你的算法有使用额外的空间吗?一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法你能在常量级的空间复杂度内解决这个问题吗?思路:牺牲第一行第一列的空间,来记录对应行列中是否有0.(空间复杂度:O(1),时间复杂度:O(m*n)) 以下面2行3列的...

2020-07-12 10:17:08 2144

原创 leetcode-----你在爬楼梯,需要n步才能爬到楼梯顶部 每次你只能向上爬1步或者2步。有多少种方法可以爬到楼梯顶部?

题目描述你在爬楼梯,需要n步才能爬到楼梯顶部每次你只能向上爬1步或者2步。有多少种方法可以爬到楼梯顶部? public int climbStairs (int n) { if(n==1 || n==0){ return 1; } int[] step = new int[n+1]; step[1]=1; step[2]=2; //第i步的方法 = 第i-1步的方法+第i-2

2020-07-12 09:12:21 2181 1

原创 leetcode-----将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。

题目描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。public ListNode mergeTwoLists (ListNode l1, ListNode l2) { //3种特殊情况 if(l1==null && l2!=null){ return l2; } if(l2==null && l1!=null){

2020-07-12 08:49:49 1519

原创 leetcode-----一个机器人在m×n大小的地图的左上角。 机器人每次向下或向右移动。机器人要到达地图的右下角。可以有多少种不同的路径从起点走到终点?

题目描述一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。可以有多少种不同的路径从起点走到终点?上图是3×7大小的地图,有多少不同的路径?备注:m和n小于等于100public int uniquePaths (int m, int n) { int[][] dp = new int[m][n]; .

2020-07-11 13:52:34 2076 1

原创 leetcode------给定一个整数n,将数字1到n^2n 2 按螺旋的顺序填入n×n的矩阵

题目描述给定一个整数n,将数字1到n^2n2按螺旋的顺序填入n×n的矩阵例如:给出的n=3,你应该返回如下矩阵:public int[][] generateMatrix (int n) { int[][] result = new int[n][n]; if(n<1){ return result; } int count=1;//依次累加,存放到矩阵中 int ro

2020-07-11 12:01:36 764

原创 leetcode-----请计算给出的数组(至少含有一个数字)中具有最大和的子数组(子数组要求在原数组中连续)

题目描述请计算给出的数组(至少含有一个数字)中具有最大和的子数组(子数组要求在原数组中连续)例如:给出的数组为[−2,1,−3,4,−1,2,1,−5,4],子数组[−2,1,−3,4,−1,2,1,−5,4],具有最大的和:6.拓展:如果你已经提出了O(n)的解决方法,请尝试使用分治算法来解决这道题。这道题分治的解法更巧妙一些。public int maxSubArray (int[] A) { //依次计算以每个位置结尾的子数组的累加和,最后保留最大的累加和

2020-07-11 11:15:40 311

原创 leetcode-----给出一个用二维矩阵表示的图像 返回该图像顺时针旋转90度的结果

题目描述给出一个用二维矩阵表示的图像返回该图像顺时针旋转90度的结果扩展:你能使用原地算法解决这个问题么? public void rotate(int[][] matrix) { //分两步进行处理(总共旋转了90°) /*1)沿y=x对角线进行翻转(即4和1交换) 1 2 翻转为 1 3 3 4 2 4 **2)沿x轴进行翻转(即1 3和2 4交换) .

2020-07-11 08:11:30 412

原创 leetcode-----将给出的链表中的节点每k个一组翻转,返回翻转后的链表

题目描述将给出的链表中的节点每k个一组翻转,返回翻转后的链表如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。只允许使用常数级的空间例如:给定的链表是1->2->3->4->5对于 k= 2, 你应该返回 2->1->4->3->5对于k= 3, y你应该返回3->2->1->4->5public ListNode reverseKGrou...

2020-07-11 07:29:39 2420

原创 leetcode------将给定的链表中每两个相邻的节点交换一次,返回链表的头指针

题目描述将给定的链表中每两个相邻的节点交换一次,返回链表的头指针例如,给出1->2->3->4,你应该返回链表2->1->4->3。你给出的算法只能使用常量级的空间。你不能修改列表中的值,只能修改节点本身。public ListNode swapPairs (ListNode head) { if(head==null || head.next==null){//不含节点 或 只含有一个节点 return head

2020-07-10 11:58:41 920

原创 leetcode-------合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。

题目描述合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。public ListNode mergeKLists(ArrayList<ListNode> lists) { if(lists==null||lists.size()==0){ return null; } //遍历链表集合,依次进行合并 ListNode first = lists.get(0);

2020-07-10 11:00:25 607

原创 leetcode-----给定一个已排序的数组,使用就地算法将重复的数字移除,使数组中的每个元素只出现一次,返回新数组的长度。

题目描述给定一个已排序的数组,使用就地算法将重复的数字移除,使数组中的每个元素只出现一次,返回新数组的长度。不能为数组分配额外的空间,你必须使用常熟级空间复杂度的就地算法。例如,给定输入数组A=[1,1,2],你给出的函数应该返回length=2,A数组现在是[1,2]。 public int removeDuplicates(int[] A) { int count=0; for(int i=1;i<A.length;i++){//当前不重.

2020-07-10 07:42:28 751

原创 leetcode------给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。

题目描述给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。例如,给出n=3,解集为:"((()))", "(()())", "(())()", "()(())", "()()()"解析:关键点在于当前左括号的数量l 大于等于 右括号的数量r <1>当前左括号的数量l < 总的括号对数:可添加左括号 <2>当前右括号的数量r < 当前左括号的数量l :可添加右括号 <3&g...

2020-07-10 07:13:27 1933

原创 leetcode-----给定一个数组和一个值,使用就地算法将数组中所有等于这个值的元素删除,并返回新数组的长度。

题目描述给定一个数组和一个值,使用就地算法将数组中所有等于这个值的元素删除,并返回新数组的长度。元素的顺序可以更改。你不用去关心大于当前数组长度的空间里面存储的值 //就地删除数据A中的元素 public int removeElement(int[] A, int elem){ int count=0; for(int i=0;i<A.length;i++){ if(A[i]!=elem){//将不是elem的元素重新排列在数组

2020-07-09 12:05:35 694

原创 leetcode-----有两个大小分别为m和n的有序数组A和B。请找出这两个数组的中位数。你需要给出时间复杂度在O(log (m+n))以内的算法。

题目描述有两个大小分别为m和n的有序数组A和B。请找出这两个数组的中位数。你需要给出时间复杂度在O(log (m+n))以内的算法。/*** 获取两个数组的中位数*/ public double findMedianSortedArrays(int[] A, int[] B) { int m = A.length;//数组A的长度 int n = B.length;//数组B的长度 int l = (m+n+1)/2; int r

2020-07-09 11:53:12 1297

原创 leetcode-----给出一个整数数组,请在数组中找出两个加起来等于目标值的数,

题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {2, 7, 11, 15},目标值为9输出 ndex1=1, index2=2方法一 暴力遍历(复杂度高O(n^2)) public int[] twoSum (int[] numbers, int target).

2020-07-08 10:49:12 3499 2

原创 letcode-----给定n个非负整数a1,a2,…,an,其中每个数字表示坐标(i, ai)处的一个点。以(i,ai)和(i,0)(i=1,2,3...n)为端点画出n条直线。你可以从中选择两条线

题目描述给定n个非负整数a1,a2,…,an,其中每个数字表示坐标(i, ai)处的一个点。以(i,ai)和(i,0)(i=1,2,3...n)为端点画出n条直线。你可以从中选择两条线与x轴一起构成一个容器,最大的容器能装多少水?注意:你不能倾斜容器例如:输入 [1,8,6,2,5,4,8,3,7]输出: 49方法一(复杂度高) public int maxArea (int[] height) { int w=0,h=0; int

2020-07-08 09:50:51 903

原创 leetcode-----将给出的整数x翻转。

题目描述将给出的整数x翻转。例1:x=123,返回321例2:x=-123,返回-321你有思考过下面的这些问题么?如果整数的最后一位是0,那么输出应该是什么?比如10,100你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。 public int reverse (int x) { int reve

2020-07-08 09:26:52 689

原创 leetcode----在不使用额外的内存空间的条件下判断一个整数是否是回文(java)方法2

题目描述在不使用额外的内存空间的条件下判断一个整数是否是回文提示:负整数可以是回文吗?(比如-1)如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制你可以将整数翻转。但是,如果你做过题目“Reverse Integer”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?这道题有更具普遍性的解法。 public boolean isPalindrome (int x) { //分别比较x的左边和右边的数字:不同,返回false;相同,则

2020-07-08 09:12:21 484

原创 leetcode-----在不使用额外的内存空间的条件下判断一个整数是否是回文(java)

题目描述在不使用额外的内存空间的条件下判断一个整数是否是回文提示:负整数可以是回文吗?(比如-1)如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制你可以将整数翻转。但是,如果你做过题目“Reverse Integer”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?这道题有更具普遍性的解法。 public boolean isPalindrome (int x) { //对该数字进行反转 int reversa

2020-07-08 07:39:29 334

原创 leetcode----给定一个字符串,找出最长的不具有重复字符的子串的长度(java)

题目描述给定一个字符串,找出最长的不具有重复字符的子串的长度。例如,“abcabcbb”不具有重复字符的最长子串是“abc”,长度为3。对于“bbbbb”,最长的不具有重复字符的子串是“b”,长度为1。public int lengthOfLongestSubstring (String s) { if (s == null || s.length() == 0) return 0; //map集合用来标记已经遍历过的字符 Map<Char

2020-07-08 06:51:46 1002 2

空空如也

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

TA关注的人

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