
C++算法
Zeus_dad
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
统计0到n之间1的个数[数学,动态规划dp](经典,详解)
转载自https://www.cnblogs.com/ECJTUACM-873284962/p/6658711.html问题描述给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数。 例如:N=2时 1,2出现了1个 “1” 。N=12时 1,2,3,4,5,6,7,8,9,10,11,12。出现了5个“1”。方法一 暴力求解最直接的方法就是从1开始遍历到N,将其中...转载 2019-07-27 13:02:02 · 743 阅读 · 0 评论 -
C++算法:字母异位词分组-----multimap和map的使用
题目:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。方法一:使用multimap的特性,...原创 2019-06-14 10:44:24 · 289 阅读 · 0 评论 -
C++算法:字符串转换整数 (atoi)
题目;首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串...原创 2019-06-02 16:43:50 · 2443 阅读 · 1 评论 -
C++算法:两数相除----使用二分查找的思想
题目:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3 输出: 3示例 2:输入: dividend = 7, divisor = -3 输出: -2说明:除数不为 0。假设我们...原创 2019-06-02 15:05:46 · 1473 阅读 · 0 评论 -
C++算法:下一个排列----找规律
题目:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。实例:以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1代码:class Solution {p...原创 2019-06-13 16:12:26 · 1437 阅读 · 0 评论 -
C++算法:通配符匹配----双指针
题目:给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输...原创 2019-06-13 14:51:06 · 1005 阅读 · 0 评论 -
C++算法:跳跃游戏-----贪心算法
题目:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。思...原创 2019-06-13 14:48:10 · 2226 阅读 · 0 评论 -
C++算法:旋转图像---翻转矩阵
题目:给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matr...原创 2019-06-13 14:37:27 · 1575 阅读 · 0 评论 -
C++算法:字符串相乘----递归累成、累加
题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3” 输出: “6”示例 2:输入: num1 = “123”, num2 = “456” 输出: “56088”说明:num1 和 num2 的长度小于110。num1 和 num2 ...原创 2019-06-06 21:43:44 · 1409 阅读 · 0 评论 -
C++算法:有效的括号:(stack的用法,还有switch注意事项)
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。实例:输入: “()” 输出: true 输入: “([)]” 输出: false思想:使用stack压栈出栈temp.push(s[i]); temp_char =...原创 2019-05-29 15:42:29 · 631 阅读 · 0 评论 -
C++算法:删除链表的倒数第N个节点---双指针
(一定要考虑头结点)题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。说明:给定的 n 保证是有效的。示例:给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.思路一;先遍历链表有多少个,然后判断删除的是否为头结点if(n == count),否则使...原创 2019-05-29 14:55:13 · 1200 阅读 · 0 评论 -
c++算法:四数之和---固定两数,用夹逼法
题目:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:...原创 2019-05-29 13:07:35 · 672 阅读 · 0 评论 -
C++算法:实现Pow(x, n)
题目;实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 3...原创 2019-06-14 13:37:39 · 3069 阅读 · 0 评论 -
C++算法:正则表达式匹配------回溯+动态规划
题目:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。’.’ 匹配任意单个字符’’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入: s = “aa” p = “a...原创 2019-06-03 14:13:35 · 832 阅读 · 0 评论 -
C++算法:串联所有单词的子串 ---全排列(思路一)----map比较(思路二)
题目:给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”,words = [“foo”,“bar”] 输出:[0,9] 解释:从索引 0 和...原创 2019-06-03 16:40:46 · 530 阅读 · 0 评论 -
C++算法:两个栈实现一个队列
class Solution{ public: void push(int node){ stack1.push(node); } int pop(){ int ret, temp; //如果stack2不为空,则直接弹出栈顶元素即为队头元素 if(!stack2.empty()) { ret = stack2.top();...原创 2019-07-07 12:26:42 · 357 阅读 · 0 评论 -
C++算法:快速排序
思路:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要笑,然后再按此方法队这两部分数据进行快速排序,整个排序过程可通过递归进行,以此达到这个数据变成有序数据。代码: int oneQuickSort(vector<int>&data, int left, int right) //使用夹逼法挑出关键字,并且交换过程中的不遵循右...原创 2019-07-07 12:25:34 · 524 阅读 · 1 评论 -
C++算法:螺旋矩阵
题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出: [1,2,3,4...原创 2019-06-29 16:44:43 · 3146 阅读 · 0 评论 -
C++算法:最大子序和----贪心和分治法
题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。方法一:(保证了每次计算和都是从正数开始)拿当前的和temp判...原创 2019-06-29 15:21:15 · 1862 阅读 · 0 评论 -
C++算法:在排序数组中查找元素的第一个和最后一个位置------二分查找法+双指针
题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], ...原创 2019-06-04 22:12:35 · 2620 阅读 · 0 评论 -
C++算法:搜索旋转排序数组-----二分查找
题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], targ...原创 2019-06-04 21:26:44 · 404 阅读 · 0 评论 -
C++算法:最长有效括号 -----栈的使用----中间存储
题目:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()”示例 2:输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()”方法一(暴力法):考虑给定字符串中每种可能的非空偶数长度子字符串,检查它(非空偶数长度子字符串)是否是一个有效括号字符...原创 2019-06-04 12:25:45 · 783 阅读 · 0 评论 -
C++算法:N皇后问题-----递归回溯
题目:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入: 4输出: [[".Q…", // 解法 1“…Q”,“Q…”,...原创 2019-06-15 08:55:08 · 1385 阅读 · 0 评论 -
C++算法:电话号码的字符组合---通过辅助数组迭代更新
题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。实例:输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路:1.特殊情况为“”则返回{}2. 首先求出返回值的总容量,分配好空间;3.使用一个中间数组te...原创 2019-05-29 10:40:15 · 398 阅读 · 0 评论 -
C++算法:接雨水
题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。实例:输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6思路一:从头开始循环,每次找到<=height[i]的数...原创 2019-06-06 14:16:32 · 2160 阅读 · 1 评论 -
C++算法:缺失的第一个正数----仿哈希表----二分查找
题目:给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0] 输出: 3示例 2:输入: [3,4,-1,1] 输出: 2示例 3:输入: [7,8,9,11,12] 输出: 1说明:你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。思路一:首先将数组排序;在进行情况分析:一。nums为空或最大的数小于1或最小的数大于1。...原创 2019-06-06 12:38:11 · 379 阅读 · 0 评论 -
C++算法:搜索插入位置-----递归变种二分查找法
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5 输出: 2示例 2:输入: [1,3,5,6], 2 输出: 1示例 3:输入: [1,3,5,6], 7 输出: 4思路:变种二分查找法,有三种情况:一。当begin>e...原创 2019-06-05 10:15:19 · 393 阅读 · 0 评论 -
C++算法:两两交换链表中的节点----递归思想
题目;给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.解题思路:**只要head和head->next存在(也是终止条件)**就交换内容,每次递归使head=head->next->next;...原创 2019-05-30 20:59:27 · 826 阅读 · 0 评论 -
C++算法:合并两个有序链表---递归思想
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4代码:class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNod...原创 2019-05-30 20:02:17 · 1283 阅读 · 0 评论 -
C++算法:最大回文子串---动态规划-----夹逼法----中心扩展法
题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd” 输出: “bb”思路一:1.空串处理2. ne = s.rfind(s[i], f);从右开始找匹配的字符,找到判断是否为回文子串,没找到i++;...原创 2019-05-28 11:07:58 · 809 阅读 · 0 评论 -
C++算法:合并K个排序链表-----(使用递归思想)
题目:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6代码:/** * Definition for singly-linked list. * struct ListNode {...原创 2019-05-30 19:42:08 · 991 阅读 · 0 评论 -
C++算法:寻找两个有序数组的中位数----归并排序
题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3] nums2 = [2] 则中位数是 2.0示例 2:nums1 = [1, 2] nums2 = [3, 4] ...原创 2019-05-28 08:47:01 · 1109 阅读 · 3 评论 -
C++算法:无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew” 输出: 3 解释: ...原创 2019-05-27 20:41:47 · 4175 阅读 · 0 评论 -
C++算法:括号生成----回溯法
题目:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:["((()))","(()())", “(())()”, “()(())”, “()()()”]思路:方法一:暴力法思路:因为最后的结果必然是2n长度的字符串!!!我们可以生成所有 2^{2n}个 ‘(’ 和 ‘)’ 字符构成的序列。然后,我们将检查...原创 2019-05-30 15:05:24 · 1100 阅读 · 0 评论 -
c++算法:不含重复元素的全排列和含重复元素的全排列----递归思想
一、不含重复元素的全排列算法思路:(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组;(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组void swap(vector<int>&a, int i, int j)...原创 2019-05-30 13:18:15 · 2188 阅读 · 0 评论 -
C++算法:两数相加---(链表指针用法)
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。例如:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 ...原创 2019-05-27 15:55:45 · 1182 阅读 · 0 评论 -
C++算法;最接近的三数之和---两头堵模型(对撞指针)
题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如:给定数组 nums = [-1,2,1,-4], 和 target = 1。 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路:1.排序:2.特殊情况...原创 2019-05-27 12:17:55 · 374 阅读 · 0 评论 -
C++算法:有效的数独
题目:判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。示例 1: 输入: [ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9",...原创 2019-06-05 11:01:35 · 2479 阅读 · 0 评论 -
git在push到远端时报错:fatal: The remote end hung up unexpectedly
报错显示:efatal: The remote end hung up unexpecterror: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too LargedlyWriting objects: 100% (61350/61350), 4.32 GiB | 657...原创 2019-05-31 08:27:20 · 1496 阅读 · 0 评论 -
C++算法:K个一组翻转链表---递归+循环
题目:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5当 k = ...原创 2019-05-31 08:55:10 · 953 阅读 · 0 评论