算法
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 · 377 阅读 · 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 · 252 阅读 · 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 · 260 阅读 · 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 · 106 阅读 · 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 · 98 阅读 · 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 · 121 阅读 · 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 · 150 阅读 · 0 评论 -
【LeetCode】两数之和
题目:给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2021-06-19 10:46:02 · 215 阅读 · 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 · 100 阅读 · 0 评论 -
【LeetCede】剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(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 · 170 阅读 · 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 · 109 阅读 · 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 · 130 阅读 · 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 · 146 阅读 · 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 · 126 阅读 · 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 · 245 阅读 · 0 评论 -
【LeetCode】38.外观数列
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 1112211被读作"one 1"("一个一") , 即11。11 被读作"two 1s"("两个一"), 即21。21 被读作"one 2", "one 1"("一个二","一个一"), 即1211。给定一个正整数 n(1 ≤n≤ 30),输出外观数列的第 n 项。...原创 2020-05-27 22:54:34 · 145 阅读 · 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 · 171 阅读 · 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 · 125 阅读 · 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 · 153 阅读 · 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 · 118 阅读 · 0 评论 -
【LeetCode】6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int...原创 2020-05-18 23:13:13 · 168 阅读 · 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 · 185 阅读 · 0 评论 -
【LeetCode】8. 字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整..原创 2020-05-17 15:31:54 · 138 阅读 · 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 · 167 阅读 · 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 · 117 阅读 · 0 评论 -
【LeetCode】20、有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输出: true bool i...原创 2020-05-13 11:53:51 · 129 阅读 · 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 · 181 阅读 · 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 · 494 阅读 · 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 · 387 阅读 · 0 评论
分享