
算法
AllenSun-1990
上海先楫半导体资深FAE工程师,不定期更新HPMicro高性能MCU应用案例。
展开
-
Algorithm:接雨水
算法:接雨水原创 2022-04-28 19:48:49 · 156 阅读 · 0 评论 -
Algorithm:LeetCode在线调试技巧
LeetCode在线调试技巧原创 2022-04-28 07:05:19 · 2089 阅读 · 0 评论 -
Algorithm:缺失的第一个正数
算法:求缺失的第一个正数原创 2022-04-27 09:39:11 · 141 阅读 · 0 评论 -
Algorithm:组合总和 II
算法:组合总和原创 2022-04-26 21:13:16 · 172 阅读 · 0 评论 -
Algorithm:组合总和
给你一个 无重复元素 的整数数组candidates 和一个目标整数target,找出candidates中可以使数字和为目标数target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target 的不同组合数少于 150 个。原创 2022-01-02 20:50:31 · 467 阅读 · 0 评论 -
Algorithm:翻转字符串里的单词
给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面或者单词间包含多余的空格。翻转后单词间应当仅用一个空格分隔。翻转后的字符串中不应包含额外的空格。原创 2022-01-02 09:47:03 · 214 阅读 · 0 评论 -
Algorithm:外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。原创 2022-01-02 07:41:04 · 204 阅读 · 0 评论 -
Algorithm:解数独
编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。示例:输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8","...原创 2021-12-30 14:41:32 · 362 阅读 · 0 评论 -
Algorithm:有效的数独
请你判断一个9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用'.'表示。示例 1:输入:board =[["5","3",".",".","7",".",".","...原创 2021-12-26 23:05:12 · 108 阅读 · 0 评论 -
Algorithm:在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:num...原创 2021-12-26 11:54:08 · 101 阅读 · 0 评论 -
Algorithm:搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一.原创 2021-12-26 09:41:45 · 85 阅读 · 0 评论 -
Algorithm:最长有效括号
给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0提示:0 <= s.length <= 3 * 104s[i] 为 '(' 或 ')'来源:力扣(LeetCode)链接:https://leetcode-...原创 2021-12-25 19:27:40 · 250 阅读 · 0 评论 -
Algorithm:下一个排列
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输出:原创 2021-12-25 12:01:58 · 199 阅读 · 0 评论 -
Algorithm:串联所有单词的子串
给定一个字符串s和一些 长度相同 的单词words 。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。注意子串要与words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑words中单词串联的顺序。示例 1:输入:s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出的顺序不重要, [9,0] 也...原创 2021-12-22 22:37:09 · 514 阅读 · 0 评论 -
Algorithm:两数相除
给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数dividend除以除数divisor得到的商。原创 2021-12-22 16:43:24 · 109 阅读 · 0 评论 -
Algorithm:实现 strStr()
实现strStr()函数。给你两个字符串haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1 。说明:当needle是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当needle是空字符串时我们应当返回 0 。这与 C 语言的strstr()以及 Java 的indexOf()定义相符。示例 1:输入:haystac...原创 2021-12-22 09:46:09 · 104 阅读 · 0 评论 -
Algorithm:两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100/** * Definition for singly...原创 2021-11-13 12:33:38 · 94 阅读 · 0 评论 -
Algorithm:合并K个升序链表
/***给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:l...原创 2021-10-26 13:51:27 · 124 阅读 · 0 评论 -
Algorithm:合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序...原创 2021-10-11 23:16:35 · 113 阅读 · 0 评论 -
C语言中volatile关键字的作用
一.前言 编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,1)在硬件上:引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。2)软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器。由于访问寄存器要比访问内存单元快的多,编译器在存取变量时,为提高存取速度,编译器优化有时..转载 2021-05-09 07:53:24 · 1992 阅读 · 0 评论 -
Algorithm: 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n &...原创 2021-10-10 19:15:41 · 101 阅读 · 0 评论 -
Algorithm:四数之和
给你一个由 n 个整数组成的数组nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]] :0 <= a, b, c, d< na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,-1,0,-2,2], target = ...原创 2021-09-30 17:02:05 · 118 阅读 · 0 评论 -
Algorithm:最接近的三数之和
给定一个包括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^4...原创 2021-06-26 09:18:17 · 92 阅读 · 0 评论 -
Algorithm:三数之和为0
#include <iostream>#include <vector>#include <algorithm>using namespace std;class solution{public: vector<vector<int> > getThreeSum(vector<int> &nums) { vector<int> arr = nums; vector.原创 2021-06-08 11:07:24 · 414 阅读 · 1 评论 -
Algorithm:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成来源...原创 2021-06-06 06:56:01 · 111 阅读 · 0 评论 -
Algorithm:罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常...原创 2021-06-05 15:23:37 · 102 阅读 · 0 评论 -
Algorithm:整数转罗马数字
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常...原创 2021-06-01 21:51:07 · 135 阅读 · 0 评论 -
Algorithm:盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例 2:输...原创 2021-06-01 06:44:17 · 268 阅读 · 0 评论 -
Algorithm:数组中出现次数超过一半的数字
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M热度指数:693525本题知识点:哈希数组题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例1输入[1,2,3,2,2,2,5,4,2]返回值2class Solution {public: i...原创 2021-05-06 16:56:25 · 109 阅读 · 0 评论 -
Algorithm:最长回文子串
题目描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例1输入"abc1234321ab",12返回值7解题思路:求以n结尾的最长的回文字符串,以current_start开始,以current_stop = n结束。则以n+1结尾的最长的子字符串要么是在此基础上向前扩展一个字符的,current_start--;current_stop = n + 1;要么是从第current_.原创 2021-05-05 12:02:20 · 103 阅读 · 0 评论 -
Algorithm:二分查找-II
题目描述请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1示例1输入[1,2,4,4,5],4返回值2说明从左到右,查找到第1个为4的,下标为2,返回2 示例2输入[1,2,4,4,5],3返回值-1示例3输入[1,1,1,1,1],1返回值0class So.原创 2021-05-04 16:08:06 · 104 阅读 · 0 评论 -
Algorithm:括号序列
题目描述给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。示例1输入"["返回值false示例2输入"[]"返回值trueclass Solution {public: /** * * @param s string字符串 * @re...原创 2021-05-04 14:59:22 · 248 阅读 · 0 评论 -
Algorithm:两数之和
题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2示例1输入[3,2,4],6返回值[2,3]class Solution {public: ..原创 2021-05-04 14:35:47 · 92 阅读 · 0 评论 -
Algorithm:最小编辑代价
题目描述给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。示例1输入"abc","adc",5,3,2返回值2示例2输入"abc","adc",5,3,100返回值8备注:1 \leq |str_1|, |str_2| \leq 50001≤∣str1∣,∣str2∣≤50001 \leq ic, dc, rc \leq 100001≤ic原创 2021-04-13 22:41:14 · 157 阅读 · 0 评论 -
Algorithm:二叉树的最大深度
题目描述求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。示例1输入{1,2}返回值2示例2输入{1,2,3,4,#,#,5}返回值3/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** .原创 2021-04-13 21:15:41 · 120 阅读 · 0 评论 -
Algorithm:斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n\leq 39n≤39示例1输入4返回值3class Solution {public: int Fibonacci(int n) { if(n < 2) { return n; } int pre_val_1 = 0; int原创 2021-04-13 20:36:45 · 124 阅读 · 0 评论 -
Algorithm:找到字符串的最长无重复字符子串
题目描述给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。示例1输入[2,3,4,5]返回值4示例2输入[2,2,3,4,3]返回值3备注:1 \leq n \leq 10^51≤n≤105解题中:class Solution {public: /** * * @param arr int整型vector the array * @return int整原创 2021-04-12 22:18:23 · 215 阅读 · 1 评论 -
Algorithm:通配符匹配
题目描述请实现支持'?'and'*'.的通配符模式匹配'?' 可以匹配任何单个字符。'*' 可以匹配任何字符序列(包括空序列)。返回两个字符串是否匹配函数声明为:bool isMatch(const char *s, const char *p)下面给出一些样例:isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisM原创 2021-04-05 21:13:06 · 397 阅读 · 0 评论 -
Algorithm:反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。示例1输入{1,2,3}返回值{3,2,1}/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(!...原创 2021-04-05 17:32:35 · 94 阅读 · 0 评论 -
Algorithm:正则表达式匹配
给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例 1:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 '...原创 2021-03-28 15:24:01 · 419 阅读 · 0 评论