算法
trancybao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【LeetCode】1926.迷宫中离入口最近的出口
class Solution { public int nearestExit(char[][] maze, int[] entrance) { // 初始化可走的四个方向 List<int[]> step = new ArrayList<>(); step.add(new int[]{0, 1}); step.add(new int[]{0, -1}); step.add(new int[]{.原创 2021-09-15 09:52:43 · 420 阅读 · 0 评论 -
【LeetCode】236.二叉树的最近公共祖先
class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { // 找不到或者根节点就是p或q if (root == null || root == p || root == q) { return root; } TreeNode left = lowestCommonAncest.原创 2021-09-06 10:10:04 · 270 阅读 · 0 评论 -
【LeetCode148】排序链表
对一个链表排序,归并思路 class Solution { public ListNode sortList(ListNode head) { if (head == null) { return head; } ListNode tail = head; while (tail.next != null) { tail = tail.next; } r原创 2021-09-05 23:17:03 · 278 阅读 · 0 评论 -
【LeetCode】105. 从前序与中序遍历序列构造二叉树
class Solution { /** * 前序[根,[左子树], [右子树]] * 中序[[左子树],根,[右子树]] */ //用HashMap来快速定位中序遍历根节点 Map<Integer, Integer> indexMap; public TreeNode myBuildTree(int[] preorder, int[] inorder, int pre_left, int pre_right, int in_l.原创 2021-08-08 23:37:15 · 117 阅读 · 0 评论 -
【LeetCode】142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。 public class Solution { public ListNode detectCycle(ListNode head) { if (head == null || head.next == null) { return null; } ListNode fast = head; ListNode slow = hea..原创 2021-08-05 22:14:34 · 110 阅读 · 0 评论 -
【LeetCode】56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 class Solution { public int[][] merge(int[][] intervals) { if (intervals.length == 1) { return intervals; }原创 2021-08-04 22:12:07 · 143 阅读 · 0 评论 -
【LeetCode】46. 全排列
给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。 示例 1: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解法: class Solution { public List<List<Integer>> permute(int[] nums) { // 存结果 List<List&l...原创 2021-08-03 22:37:11 · 173 阅读 · 0 评论 -
【LeetCode】两数之和
题目: 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ...原创 2021-06-19 10:46:02 · 240 阅读 · 0 评论 -
【LeetCode】81. 搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。 示例1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例2: 输入: nums = [2,5,6,0,0,1,2], target = 3 输出: false 进阶: 这是 搜索旋转排序数组的延...原创 2020-07-15 16:07:13 · 121 阅读 · 0 评论 -
【LeetCede】剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0,F(1)= 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 解法一:普通递归(耗时高) class Solution { public: int ...原创 2020-07-14 17:38:12 · 181 阅读 · 0 评论 -
【LeetCode】33. 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是O(logn) 级别。 示例 1: 输入: nums = [4,5,6,7,0,1,2], target = 0 输出: 4 示例2: 输入: nums = [4,5,6,7,0,1,2], ta...原创 2020-06-28 22:44:57 · 121 阅读 · 0 评论 -
【LeetCode】153. 寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。 示例 1: 输入: [3,4,5,1,2] 输出: 1 示例 2: 输入: [4,5,6,7,0,1,2] 输出: 0 思路一:暴力法,遍历寻找最小值,稍微优化一下,当nums[i]<nums[i-1]&&nums[i]>nums[i+1]时,即为所寻 思路...原创 2020-06-18 10:58:38 · 142 阅读 · 0 评论 -
【LeetCode】442. 数组中重复的数据
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 一、使用辅助空间(O(n)) public: vector<int> findDuplicates(vector<int>& nums) { vector<原创 2020-06-17 20:56:56 · 159 阅读 · 0 评论 -
【LeetCode】16. 最接近的三数之和
给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。 提示: 3 <= nums.length <= 10^3 -10^3<= nums[i]<= 10^3 -10^...原创 2020-06-08 11:18:06 · 144 阅读 · 0 评论 -
【LeeCode】43.字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = "2", num2 = "3" 输出: "6" 示例2: 输入: num1 = "123", num2 = "456" 输出: "56088" 说明: num1和num2的长度小于110。 num1 和num2 只包含数字0-9。 num1 和num2均不以零开头,除非是数字 0 本身。 不能使用任何标准库的大数类型(比如...原创 2020-06-01 09:48:44 · 265 阅读 · 0 评论 -
【LeetCode】38.外观数列
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1被读作"one 1"("一个一") , 即11。 11 被读作"two 1s"("两个一"), 即21。 21 被读作"one 2", "one 1"("一个二","一个一"), 即1211。 给定一个正整数 n(1 ≤n≤ 30),输出外观数列的第 n 项。 ...原创 2020-05-27 22:54:34 · 160 阅读 · 0 评论 -
【LeetCode】94. 二叉树的中序遍历
一、递归方法: class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; vector<int> left; vector<int> right; if (root != NULL) { left = inorderTraversal(root->left); res.insert(res.end(),原创 2020-05-23 17:06:02 · 193 阅读 · 0 评论 -
【LeetCode】145. 二叉树的后序遍历
一、递归方法 class Solution { public: vector<int> postorderTraversal(TreeNode* root) { vector<int> res; vector<int> left; vector<int> right; if (root != NULL) { left = postorderTraversal(root->left); right = postorderT原创 2020-05-23 10:37:25 · 138 阅读 · 0 评论 -
【LeetCode】144.二叉树的前序遍历
1.递归方法 class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> pre; vector<int> left; vector<int> right; if (root != NULL) { pre.push_back(root->val); left=preorderTraversal(root->原创 2020-05-21 22:37:50 · 167 阅读 · 0 评论 -
【LeetCode】19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* remo..原创 2020-05-20 15:19:45 · 140 阅读 · 0 评论 -
【LeetCode】6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int...原创 2020-05-18 23:13:13 · 182 阅读 · 0 评论 -
【LeetCode】26. 删除排序数组中的重复项(C++)
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 一、单指针遍历求解(耗时180ms) class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) { return 0; } //遍历指针 for原创 2020-05-17 18:26:20 · 201 阅读 · 0 评论 -
【LeetCode】8. 字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整..原创 2020-05-17 15:31:54 · 154 阅读 · 0 评论 -
【LeetCode】合并两个有序链表
方法一:穿线法 class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == NULL) { return l2; } if (l2 == NULL) { return l1; } ListNode* p = l1; ListNode* q = l2; ListNode* head ; ListNode* tail ; if (l1->原创 2020-05-15 22:51:10 · 178 阅读 · 0 评论 -
【LeetCode】三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 难点在于去掉重复答案 方法:排序+双指针(C++) #include "pch.h" #include <io...原创 2020-05-15 22:45:38 · 140 阅读 · 0 评论 -
【LeetCode】20、有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例2: 输入: "()[]{}" 输出: true 示例3: 输入: "(]" 输出: false 示例4: 输入: "([)]" 输出: false 示例5: 输入: "{[]}" 输出: true bool i...原创 2020-05-13 11:53:51 · 140 阅读 · 0 评论 -
【LeetCode】罗马数字转化阿拉伯数字
int romanToInt(string s) { enum Roman { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000, IV = 4, IX = 9, XL = 40, XC = 90, CD = 400, CM = 900 }; int len = s.length(); int num = 0; Roman* arr = new Roman[len];//转化为枚举存入数组 int r = 0;//记录ar.原创 2020-05-11 23:05:52 · 197 阅读 · 0 评论 -
【LeetCode】最长回文子串的四种解题方法
1.暴力法 string longestPalindrome(string s) { if (s == "") { return ""; } int len = s.length(); for (int i = len; i > 0; i--) { for (int begin = 0; begin + i-1 < len; begin++) { string ss = s.substr(begin, i); if (isPal(ss)) {原创 2020-05-09 21:27:10 · 520 阅读 · 0 评论 -
最长公共子序列算法(LCS)及最长公共子串求法
C++实现代码: #include <iostream> #include <string> using namespace std; class Solution { public: string LCS(string s1,string s2) { if (s1 == "" || s2 == "") { return ""; } int m ...原创 2020-05-07 20:58:00 · 410 阅读 · 0 评论
分享