自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 406. 根据身高重建队列

题目:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列思路:贪婪具体:先按身高从高到低排,相同身高根据k从小到大排,再挨个插入代码:class Solution(object): def reconstructQueue(self, people): """ :type people: List[List[int]]

2020-09-22 22:50:17 132

原创 【LeetCode】64. 最小路径和

题目:给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。思路:动态规划具体:构建二维数组,存到该位置的最小路径和代码:class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ ...

2020-09-13 21:19:57 131

原创 【LeetCode】105. 从前序与中序遍历序列构造二叉树

题目:根据一棵树的前序遍历与中序遍历构造二叉树。无重复元素思路:分治/递归:前序第一个元素为头结点,在中序中找到左子树和右子树的位置,分别构造,使用dict记录中序位置映射可优化,不需要每次从头查(无重复时) 迭代:利用栈,前序第一个元素为头结点,先找到最深的左节点,依次入栈,然后构造右子树代码:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):#

2020-09-13 20:51:54 165

原创 【LeetCode】96. 不同的二叉搜索树

题目:给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?思路:递归:超时不可取,原因类似斐波那契数列 分治/动态规划:将n分解为i和n-i,结果为左右子数乘积,再求和 卡特兰数:公式代码:class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ if n <= 1: ret...

2020-09-13 19:23:58 137 1

原创 【LeetCode】48. 旋转图像

题目:给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。思路:按圈旋转:对每一圈进行旋转,找规律,四条边的旋转 翻转:先上下翻转,再对角线交换代码:class Solution(object): def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: None Do not return anything, modify mat...

2020-09-13 18:48:08 91

原创 【LeetCode】238. 除自身以外数组的乘积

题目:给你一个长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。思路:先正向遍历,得到前i个元素乘积的数组,再反向遍历,得到后i-1个元素乘积,一前一后相乘得到结果优化点:双指针可少一次遍历代码:class Solution(object): def productExceptSelf(self, nums): """ :typ...

2020-09-13 13:21:36 123

原创 【LeetCode】类型总结

1、动态规划338. 比特位计数https://blog.csdn.net/liyinan11/article/details/1084296602、递归 94. 二叉树的中序遍历https://blog.csdn.net/liyinan11/article/details/108430177 3、回溯 39. 组合总和https://blog.csdn.net/liyinan11/article/details/108561231 ...

2020-09-13 12:54:04 155

原创 【LeetCode】39. 组合总和

题目:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。思路:回溯具体:path为遍历数组(栈),先对输入数组排序,当path合大于target时剪枝,等于target时导入res并pop,小于target时继续代码:class Solution(object): def combinationSum(self, candidate...

2020-09-13 12:52:57 104

原创 114. 二叉树展开为链表

题目:给定一个二叉树,原地将它展开为一个单链表。思路:先序遍历存起来,然后生成链表 递归:从下往上,先将左右子树分别展开,如果左子树存在,找到左子树最右节点,将根节点右子树接到该节点之后,同时转换左子树为右子树,左子树设空 非递归:从上往下,先找到左子树最右节点,与递归思路类似,转换后,根节点下移,直至为空代码:递归# Definition for a binary tree node.# class TreeNode(object):# def __init__(self

2020-09-06 22:28:40 68

原创 【LeetCode】94. 二叉树的中序遍历

题目:给定一个二叉树,返回它的中序遍历。思路:递归 迭代:构建一个栈,依次遍历存入左节点,到底弹出栈顶,并开始遍历右节点递归# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solutio.

2020-09-06 13:30:19 120

原创 【LeetCode】338. 比特位计数

题目:给定一个非负整数num。对于0 ≤ i ≤ num范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。思路:动态规划+位运算具体:对于整数k,1的总数目分为两部分——最后一位是否为1+前n位1的总数(通过右移一位)class Solution(object): def countBits(self, num): """ :type num: int :rtype: List[int] ...

2020-09-06 11:51:25 96

原创 23、从上往下打印二叉树

LeetCode简化版import java.util.ArrayList;import java.util.*;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { t

2017-07-30 20:35:07 177

原创 22、栈的压入、弹出序列

import java.util.ArrayList;import java.util.*;public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { Stack stack = new Stack<>(); int j = 0; for(in

2017-07-30 20:22:39 177

原创 21、包含min函数的栈

没看懂要干啥的一道题???黑人问号???import java.util.Stack;public class Solution { Stack stack = new Stack<>(); Stack stack_min = new Stack<>(); public void push(int node) { stack.push(node);

2017-07-30 18:27:31 158

原创 20、顺时针打印矩阵

LeetCode原题54,复习一遍import java.util.ArrayList;public class Solution { public ArrayList printMatrix(int [][] matrix) { ArrayList ret = new ArrayList<>(); if(matrix == null || matri

2017-07-30 17:42:11 163

原创 19、二叉树的镜像

越来越喜欢递归了!/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution

2017-07-30 17:03:02 165

原创 18、数的子结构

牛客约定空树不是任意一个树的子结构,很讨厌/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public cla

2017-07-30 16:39:26 151

原创 17、合并两个排序链表

/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Merge(ListNode list1,ListNode l

2017-07-30 15:04:59 145

原创 16、反转链表(递归方法)

/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode ReverseList(ListNode head) {

2017-07-30 14:57:00 200

原创 15、链表中倒数第k个节点

/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindKthToTail(ListNode head,int

2017-07-30 14:18:48 125

原创 13、在O(1)时间删除链表节点

package test;class ListNode{ int val; ListNode next; public ListNode(int x){ val = x; }}public class Solution { public ListNode deleteNode(ListNode head, ListNode target){ if(head == null)

2017-07-29 17:29:13 162

原创 【LeetCode】数组系列(排序)

75. Sort Colors题目:由0,1,2组成的数组,对其进行排序。没搞懂考啥public class Solution { public void sortColors(int[] nums) { int count0 = 0, count1 = 0, count2 = 0; for(int x : nums){ if

2017-05-20 16:43:00 193

原创 【LeetCode】路径系列

62. Unique Paths题目:从左上到右下,有多少种不同的路径思路:排列组合public class Solution { public int uniquePaths(int m, int n) { long y = 1, x = 1; long min = Math.min(m, n); if(min == 1) re

2017-05-19 15:00:13 711

原创 【LeetCode】数组系列(间隔)

56. Merge Intervals题目:interval包含start和end,将重叠部分合并思路:用start和end标记目前的最后一个,但不急着加到List里面,因为可能有变化,对List操作时间复杂度高。还需要注意对interval类型进行compare函数重写,或是使用匿名比较器。/** * Definition for an interval. * public cl

2017-05-17 22:15:44 504

原创 【LeetCode】跳步系列

55. Jump Game题目:数组每一个元素表示能跳的最大步数,看是否能跳到最后一位思路:从后往前看,判断能否从n-2跳到n-1,如果可以,则继续判断能否从前面的节点跳到n-2,如果最后需要跳到的节点为0,则说明可以跳到。public class Solution { public boolean canJump(int[] nums) { int last

2017-05-17 20:18:41 286

原创 【LeetCode】矩阵系列

54. Spiral Matrix题目:螺旋打印一个矩阵思路:设置四个标志位,分别表示行范围和列范围,每打印一条,范围缩小1,注意要判断超范围。public class Solution { public List spiralOrder(int[][] matrix) { List ret = new ArrayList<>(); if(mat

2017-05-16 22:25:28 468

原创 【LeetCode】数组系列(子序列)

53. Maximum Subarray题目:求最大子序列和思路:动态规划——n为连续项之和,如果npublic class Solution { public int maxSubArray(int[] nums) { int ret = nums[0], n = 0; for(int x : nums){ n +=x;

2017-05-16 20:29:29 587

原创 【LeetCode】字符串系列(Anagram)

49. Group Anagrams题目:将输入字符串组按组成分类,输出分类好的字符串组思路:HashMap——设置HashMap,Key为每类字符串按升序排列,Value为该类所有字符串(List)。对于输入的每个字符串,进行字符数组转换,再进行排序,然后转换回字符串,如果HashMap中不包含该类字符串,就建新key,否则将该值加入Value。public class Solution

2017-05-16 16:42:11 404

原创 【LeetCode】图像

48. Rotate Image题目:顺时针90度旋转一个图思路:一圈一圈转,每四个一起转换public class Solution { public void rotate(int[][] matrix) { int i = 2; if(matrix.length%2 == 1) i = 3; for(; i <= matri

2017-05-15 22:40:30 176

原创 【LeetCode】数学题

50. Pow(x, n)题目:实现幂函数思路:递归——注意超出最大值的判断public class Solution { public double myPow(double x, int n) { if(n < 0){ x = 1/x; n = ~n+1; } if(n == 0

2017-05-15 20:40:45 225

原创 【LeetCode】字符串系列(其他)

38. Count and Say题目:1、11、21、1211、111221、……思路:从1到n依次获得public class Solution { public String countAndSay(int n) { String ret = new String("1"); for(int i = 1; i < n; i++){

2017-05-04 10:55:20 189

原创 【LeetCode】数独系列

36. Valid Sudoku题目:判断数独是否合法,只需行、列、块均没有重复数字即可。思路:HashSet——利用i和j,分别构造行列和块。i代表行,j代表列,即可构造每行的情况;i代表列,j代表行,即可构造每列的情况;利用i构造每块的首个元素编号,代表每个块,再利用j构造块中的每个元素。很机智的做法,就不需要设置很多HashSet。public class Solution {

2017-05-04 10:00:36 799

原创 【LeetCode】查找数组系列

33. Search in Rotated Sorted Array题目:在一个被旋转一次的递增数组中找到目标值。思路:二分法——思路一定要清晰!!!当mid和目标值不等时,判断mid和start的大小,大于说明旋转位置在后面,反之在前面。在后面的时候start-mid是递增的,可以直接判断目标值在不在其中。同理,在前面的时候mid-end是递增的,可以直接判断目标值在不在其中。pub

2017-05-02 20:42:17 249

原创 【LeetCode】排序系列

31. Next Permutation题目:找到给出序列的下一序列。思路:分三步:一是从后往前找到非递增的位置,即需要开始交换的位置;二是在该位置之后找到第一个比它大的数,并与其交换;三是对后面的序列做一个逆序,然后返回。如果没有找到第一步的位置,就对整个数组逆序。public class Solution { public void nextPermutation(int[

2017-05-01 13:21:32 267

原创 【LeetCode】字符串系列(子串)

30. Substring with Concatenation of All Words题目:在s找到所有words中所有字符串串起来的子字符串(包括words中所有字符串)的起始位置思路:

2017-04-30 22:54:52 555

原创 【LeetCode】字符串系列(匹配)

28. Implement strStr()题目:实现strStr()函数,即找到目标字符串首次出现的位置。思路:利用substring函数,用equals直接判断,简单粗暴,好像也不是很慢。需要注意两者均为空的情况。public class Solution { public int strStr(String haystack, String needle) {

2017-04-30 21:11:07 586

原创 【LeetCode】数组系列(去重)

26. Remove Duplicates from Sorted Array题目:移除排序数组重复元素,使前n个数不重复思路:设置一个指针k,标记目前不重复的最后一位,从前往后遍历,如果严格递增,就将该值覆盖k后一位,否则不进行操作,非常简单。好像是滴滴面到的题。public class Solution { public int removeDuplicates(int[]

2017-04-30 20:27:28 2836

原创 【LeetCode】括号配对系列

20. Valid Parentheses题目:判断输入字符串的括号配对是否合法思路:栈——当前字符为左括号时入栈,右括号则pop一个字符,看是否配对。需要注意栈为空的判断,在pop之前以及最后判断时。public class Solution { public boolean isValid(String s) { Stack stack = new Stac

2017-04-26 17:15:33 282

原创 【LeetCode】链表系列(排序)

19. Remove Nth Node From End of List题目:移除单链表的倒数第n个节点(仅限一次遍历)思路:Two Pointer——用两个节点框成长度为n大小的窗,窗移动到链表末尾时,即知道倒数第n个位置。这里要注意头结点的设置,可以有效处理需要移除头结点的情况。/** * Definition for singly-linked list. * public

2017-04-26 16:57:59 267

原创 【LeetCode】 回溯系列

17. Letter Combinations of a Phone Number题目:返回九宫格输入法所有可能的组合(0-9)思路:回溯——利用递归的方法一层层实现。public class Solution { public List letterCombinations(String digits) { List ret = new LinkedList<

2017-04-26 15:24:33 142

空空如也

空空如也

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

TA关注的人

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