leetcode
文章平均质量分 69
幸运小猴子
这个作者很懒,什么都没留下…
展开
-
排序算法
十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。(1)交换排序:冒泡排序 和 快速排序(2)插入排序:简单插入排序 和 希尔排序(3)选择排序:简单选择排序 和 堆排序(4)归并排序:二路归并排序 和 多路归并排序非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于...原创 2019-03-19 21:59:52 · 339 阅读 · 2 评论 -
动态规划(Dynamic Programming)
1.递归+记忆化->递推2.状态的定义:opt[n],dp[n],fib[n]3.状态转移方程:opt[n]=best_of(opt[n-1],opt[n-2],…)4.最优子结构回溯(递归)----重复计算贪心 —永远局部最优DP --记录局部最优子结构/多种记录值...原创 2019-03-24 17:04:26 · 138 阅读 · 0 评论 -
二叉查找树/平衡二叉树/红黑树
二叉查找树(二叉排序树),Binary Search Tree/Binary Sort Tree 「BST」,要想了解二叉查找树,我们首先看下二叉查找树有哪些特性呢?1.某节点的左子树节点值仅包含小于该节点值2.某节点的右子树节点值仅包含大于该节点值3.左右子树每个也必须是二叉查找树二叉查找树的一般操作的执行时间为O(lgn)。但二叉查找树若退化成了一棵具有n个结点的线性链后,则这些操作最坏情况运行时间为O(n)。平衡二叉树:首先是一棵二叉查找树。带有平衡条件:每个结点的左右子树的高度之差的绝对值原创 2020-06-30 12:04:45 · 126 阅读 · 0 评论 -
回溯算法
回溯的步骤:①画出递归树,找到状态变量(回溯函数的参数),这一步非常重要※②根据题意,确立结束条件③找准选择列表(与函数参数相关),与第一步紧密关联※④判断是否需要剪枝⑤作出选择,递归调用,进入下一层⑥撤销选择类型:1.子集,组合: 子集,子集II,组合,组合总和2.全排列:全排列,全排列II,字符串的全排列,字母大小写全排列3.搜索:解数独,单词搜索,N皇后,分割回文串A、子集:leetcode71.给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说原创 2020-09-09 18:01:08 · 122 阅读 · 0 评论 -
前缀和
总结在LeetCode中遇到的和为定值的一系列题目在数组中碰到数组和为定值的大致可以分为这两类,一类是这些数不连续,从两个数和为定值到多个数和为定值,最后升级到动态规划的多重部分和问题;另一类是数必须是连续的子数组问题1 两个数和为定值这类题应该是最常见的题型了,常见的有两种方法:(1)Hash,对每个a[i],通过hash表快速判断出target-a[i]是否在数列中,这种方法不管数组是有序的还是无序的时间复杂度都是O(n)(2)双指针,用两个指针i,j分别指向数组的两端,依次判断a[i] +原创 2020-06-30 14:33:50 · 90 阅读 · 0 评论 -
单调栈和单调队列
/*496. 下一个更大元素 I输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]*/vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> mp; stack<int> st; for (int i = nu原创 2020-12-25 10:05:25 · 113 阅读 · 0 评论 -
链表高频算法题
//合并两个有序链表class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1) { return l2; } if (!l2) { return l1; } ListNode* dummy = new ListNode; ListNode*原创 2020-06-30 10:54:07 · 2694 阅读 · 0 评论 -
冒泡&快排&堆排序
冒泡排序//冒泡排序(稳定)void bubble_sort(vector<int> &nums) { int size = nums.size(); for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (nums[j] > nums[j+1]) { swap(nums[原创 2020-06-29 20:44:50 · 296 阅读 · 0 评论 -
并查集
一般并查集:// 未改进版本class Djset {public: vector<int> parent; // 记录节点的根 Djset(int n): parent(vector<int>(n)) { for (int i = 0; i < n; i++) parent[i] = i; } int find(int x) { if (x != parent[x]) return find(paren原创 2021-01-26 20:03:15 · 75 阅读 · 0 评论 -
剑指offer2
/和为s的两个数字:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]/class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int l = 0, r = nums.size原创 2020-09-14 11:54:31 · 83 阅读 · 0 评论 -
剑指offer
/数组中出现次数超过一半的数字:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。投票法:初始cnt = 0, val = -1;若cnt == 0, 则将val设为当前值,cnt=1;往后遍历,若与val相等,则cnt++,否则cnt–/class Solution {public: int majorityElement(vector<int>& nums) { int cnt = 0, val = -1; for (a原创 2020-09-11 16:50:44 · 68 阅读 · 0 评论 -
前缀和-leetcode
前缀和就是数组第0项到当前项的和。如果用一个数组preSum表示数组A的前缀和:preSum[i]=A[0]+A[1]+…+A[i];数组A中的某项,可以表示为相邻前缀和之差:A[i]=preSum[i]-preSum[i-1]多项叠加,等号右边加减相消,得到通式:A[i]+…+A[j]=preSum[j]−preSum[i−1]i 当然可以为 0,此时 i - 1 为 - 1,我们故意让 preSum[-1] 为 0,此时:A[0]+A[1]+…+A[j]=preSum[j]预置这种不存在原创 2021-03-14 16:48:23 · 167 阅读 · 0 评论 -
滑动窗口
//1208.尽可能使字符串相等/*给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子原创 2021-03-11 22:22:44 · 852 阅读 · 0 评论 -
并查集
// 未改进版本class Djset {public: vector<int> f; // f记录每个人名的父辈是谁 int findRoot(int x) { while (x != f[x]) { x = f[x]; } return x; } void Union(int x, int y) { int x_root = findRoot(x);原创 2021-03-11 16:57:47 · 237 阅读 · 0 评论 -
leetcode 解题思路
https://www.cnblogs.com/liuzhen1995/category/1533797.htmlleetcode 解题思路原创 2020-07-18 19:46:59 · 110 阅读 · 0 评论 -
栈相关的高频题
1.两个栈实现一个队列class CQueue { stack<int> s1; stack<int> s2;public: CQueue() { } void appendTail(int value) { s1.push(value); } int deleteHead() { if (s1.empty()) { return -1;原创 2020-07-04 15:21:52 · 87 阅读 · 0 评论 -
只出现一次的数字
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。利用异或,相同的值异或为0,不同异或为1即a^b^a = b;int singleNumber(vector<int>& nums) { int res = nums[0]; for (int i = 1; i < nums.size(); i++) { res = res ^ nums[i]; } ret.原创 2020-07-04 14:24:26 · 114 阅读 · 0 评论 -
929. Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign.For example, in alice@leetcode.com, alice is the local name, and leetcode.com is the domain name.Besides lowercase let...原创 2019-03-13 23:44:43 · 138 阅读 · 0 评论 -
876. Middle of the Linked List
Given a non-empty, singly linked list with head node head, return a middle node of linked list.If there are two middle nodes, return the second middle node.Example 1:Input: [1,2,3,4,5]Output: Node...原创 2019-03-13 23:49:28 · 68 阅读 · 0 评论 -
206. Reverse Linked List
Reverse a singly linked list.Example:Input: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULLOutput: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULLpython:class Solution(object): def reverseList(原创 2019-03-14 21:30:50 · 86 阅读 · 0 评论 -
51. N-Queens
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.Given an integer n, return all distinct solutions to the n-queens puzzle.Each s...原创 2019-03-19 21:20:20 · 108 阅读 · 0 评论 -
236. Lowest Common Ancestor of a Binary Tree
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p a...原创 2019-03-15 18:35:43 · 77 阅读 · 0 评论 -
98. Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node’s key.The rig...原创 2019-03-15 23:45:49 · 60 阅读 · 0 评论 -
242. Valid Anagram
Given two strings s and t , write a function to determine if t is an anagram of s.Example 1:Input: s = “anagram”, t = “nagaram”Output: trueExample 2:Input: s = “rat”, t = “car”Output: falseclas...原创 2019-03-16 18:40:35 · 58 阅读 · 0 评论 -
921. Minimum Add to Make Parentheses Valid
Given a string S of ‘(’ and ‘)’ parentheses, we add the minimum number of parentheses ( ‘(’ or ‘)’, and in any positions ) so that the resulting parentheses string is valid.Formally, a parentheses st...原创 2019-03-16 19:26:48 · 82 阅读 · 0 评论 -
20. Valid Parentheses
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.An input string is valid if:Open brackets must be closed by the same type of bra...原创 2019-03-16 19:41:00 · 59 阅读 · 0 评论 -
69. Sqrt(x)
Implement int sqrt(int x).Compute and return the square root of x, where x is guaranteed to be a non-negative integer.Since the return type is an integer, the decimal digits are truncated and only t...原创 2019-03-20 21:33:37 · 90 阅读 · 0 评论 -
152. Maximum Product Subarray(乘积最大子序列)
Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.Example 1:Input: [2,3,-2,4]Output: 6Explanation: [2,3] has ...原创 2019-03-24 19:10:49 · 108 阅读 · 0 评论 -
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).For example:Given binary tree [3,9,20,null,null,15,7],3/ 9 20/ 15 7retu...原创 2019-03-12 23:53:49 · 72 阅读 · 0 评论 -
50. Pow(x, n)
Implement pow(x, n), which calculates x raised to the power n (xn).Example 1:Input: 2.00000, 10Output: 1024.00000Example 2:Input: 2.10000, 3Output: 9.26100Example 3:python:分治思想class Solution...原创 2019-03-18 22:01:26 · 106 阅读 · 0 评论 -
169. Majority Element
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty and the majority element alway...原创 2019-03-18 22:15:11 · 84 阅读 · 0 评论 -
104. Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.Note: A leaf is a node with no children....原创 2019-03-18 23:50:52 · 108 阅读 · 0 评论 -
111. Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.Note: A leaf is a node with no children....原创 2019-03-19 00:05:36 · 77 阅读 · 0 评论 -
22. Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.For example, given n = 3, a solution set is:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”...原创 2019-03-19 00:21:37 · 87 阅读 · 0 评论 -
72. Edit Distance
原博:https://blog.csdn.net/iyuanshuo/article/details/80112211典型的动态规划问题。首先定义状态矩阵,dp[m][n],其中m为word1的长度+1,n为word2的长度+1,为什么+1?因为要考虑如果word1或word2为空的情况,后面可以看到。定义dp[i][j]为word1中前ii个字符组成的串,与word2中前jj个字符组成的串...转载 2019-03-29 20:27:01 · 90 阅读 · 0 评论 -
2. Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return i...原创 2019-03-29 23:48:00 · 88 阅读 · 0 评论 -
594. Longest Harmonious Subsequence --counter类
我们定义一个和谐数组是一个数组,其最大值和最小值之间的差值恰好为1。现在,给定一个整数数组,你需要在其所有可能的子序列中找出其最长的和谐子序列的长度。注意,和谐数组不一定要求连续1.class Solution(object): def findLHS(self, nums): """ :type nums: List[int] :rt...原创 2019-04-03 23:51:32 · 96 阅读 · 0 评论 -
trie
trie,又称前缀树或字典树。它利用字符串的公共前缀来节约存储空间。性质(1)根节点不包含字符,除根节点外的每个节点只包含一个字符。(2)从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。(3)每个节点的所有子节点包含的字符串不相同。class Trie(object): def __init__(self): """ Ini...原创 2019-03-23 16:35:06 · 122 阅读 · 0 评论 -
79. Word Search
Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where “adjacent” cells are those horizontally or vertically ne...原创 2019-03-23 17:05:12 · 111 阅读 · 0 评论 -
191. Number of 1 Bits
Write a function that takes an unsigned integer and return the number of ‘1’ bits it has (also known as the Hamming weight).Example 1:Input: 00000000000000000000000000001011Output: 3Explanation: T...原创 2019-03-24 13:57:53 · 103 阅读 · 0 评论