算法
文章平均质量分 79
、那年雪天
这个作者很懒,什么都没留下…
展开
-
排序算法汇总---Java实现各个排序
排序算法汇总下图来自菜鸟教程:下面所有方法都有static关键字,因为测试的时候需要被main函数调用,故添加static。若需要c++版本的算法实现,可参考下面博文连接排序算法汇总—C++实现各个排序1、冒泡排序 // 冒泡排序 static void bubble_sort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { // n-1趟 for (int j = 0原创 2022-03-01 19:43:09 · 857 阅读 · 0 评论 -
LeetCode13--罗马数字转整数
题目罗马数字包含以下七种字符: 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-10-04 11:34:19 · 217 阅读 · 0 评论 -
LeetCode337---打家劫舍Ⅲ
题目描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例1输入: [3,2,...原创 2020-05-05 16:31:10 · 204 阅读 · 0 评论 -
LeetCode213---打家劫舍Ⅱ
题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例1输入: [2,3,2]输出: 3解释: ...原创 2020-05-05 16:18:30 · 192 阅读 · 0 评论 -
LeetCode198---打家劫舍
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例1输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 ...原创 2020-05-05 16:11:51 · 179 阅读 · 0 评论 -
算法笔记---问题 A: 【字符串】最长回文子串
题目描述输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同。如abba和yyxyy。在判断回文时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。输入字符串长度不超过5000,且占据单独的一行。应该输出最长的回文串,如果有多个,输出起始位置最靠左的。输入一行字符串,字符串长度...原创 2020-05-04 17:11:51 · 483 阅读 · 0 评论 -
LeetCode5---最长回文子串
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例2:输入: "cbbd"输出: "bb"解题思路:使用动态规划求解dp[i][j] 表示字符串下标为 i 和 j 之间为回文串。这道题的核心思想为,如果一个串是回文串,那么在回文串两端加...原创 2020-05-04 15:59:33 · 151 阅读 · 0 评论 -
LeetCode502---IPO
题目描述假设 力扣(LeetCode)即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W...原创 2020-04-20 15:06:19 · 157 阅读 · 0 评论 -
剑指offer---矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如a b t gc f c sj d e h矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占...原创 2020-04-08 13:14:34 · 119 阅读 · 0 评论 -
剑指offer---机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路:使用深度搜索遍历来实现递归、回...原创 2020-04-08 11:41:15 · 146 阅读 · 0 评论 -
LeetCode22---括号生成
题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]解题思路:使用回溯+递归思想实现还需要剪枝,因为如果左括号少于右括号的话,那么组成的括号是无效的//item表示组成的括号字符...原创 2020-03-11 14:37:29 · 91 阅读 · 0 评论 -
LeetCode40---组合总和Ⅱ
题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例1:输入: nums= [10,1,2,7,6,1,5], target = 8,所求解集为:[ [...原创 2020-03-10 16:31:09 · 145 阅读 · 0 评论 -
LeetCode90---子集Ⅱ
题目描述给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]解题思路:使用递归+回溯思想来解决该题的解决思想与LeetCode78—子集类似,只需要先将给定数组从小到大排序,然后使用se...原创 2020-03-10 15:48:38 · 185 阅读 · 0 评论 -
LeetCode78---子集
题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解题思路:1、使用递归+回溯思想解决对于每一个数字,都有选择组成集合或者不选择那么...原创 2020-03-10 15:44:15 · 153 阅读 · 0 评论 -
LeetCode452---用最少数量的箭引爆气球
题目描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤...原创 2020-03-10 12:10:40 · 336 阅读 · 0 评论 -
LeetCode45---跳跃游戏Ⅱ
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。解题思路:使用贪心思想。题目...原创 2020-03-09 17:48:15 · 219 阅读 · 0 评论 -
LeetCode55---跳跃游戏
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你...原创 2020-03-09 17:00:24 · 149 阅读 · 0 评论 -
LeetCode402---移掉K位数字
题目描述给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例1:输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例2:输入: num = "10200"...原创 2020-03-09 12:57:18 · 144 阅读 · 0 评论 -
LeetCode376---摆动序列
题目描述如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的...原创 2020-03-08 20:31:24 · 265 阅读 · 0 评论 -
练习---计算最少钞票的数量
题目描述有1元、5元、10元、20元、100元、200元的钞票无穷多张,现在使用这些钞票支付x元,最少需要多少张?例如x = 628元最佳支付方法:3张200元,1张20元,1张5元,3张1元,共8张。解题思路:使用贪心思想,每次选取最大面额的钞票,这样保证使用最少的张数//贪心算法 计算钞票void test2() { int RMB[] = { 200,100,20,10,...原创 2020-03-08 20:20:22 · 1433 阅读 · 0 评论 -
LeetCode455---分发饼干
题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正...原创 2020-03-08 19:48:41 · 85 阅读 · 0 评论 -
剑指offer---剪绳子
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)例如:...原创 2020-03-08 16:02:37 · 91 阅读 · 0 评论 -
剑指offer---滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2020-03-07 19:50:09 · 148 阅读 · 0 评论 -
剑指offer---正则表达式匹配
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配解题思路:这道题比较难,需要考虑较多的情况,参考的好几位牛客网大神的思路,这里总结一下:/* ...原创 2020-03-07 16:41:55 · 134 阅读 · 0 评论 -
剑指offer---字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路:每次取一个字符作为起始字符,剩下的字符全排列,可以看出,这是一个递归的过程。即剩下的字符为一个新的字符,然后全排列。...原创 2020-03-07 15:10:11 · 117 阅读 · 0 评论 -
剑指offer---数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据...原创 2020-03-06 16:53:49 · 145 阅读 · 0 评论 -
剑指offer---把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:将数组中的所有数字转换为字符串,然后进行升序排列static bool cmp(int num1,int num2){//如32和321 32321 > 32132 string s...原创 2020-03-06 15:33:26 · 96 阅读 · 0 评论 -
剑指offer---扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的...原创 2020-03-06 14:31:40 · 121 阅读 · 0 评论 -
剑指offer---构建乘积数组
题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)解题思路:假如求i = 5的时候,B数组中B[5]的值即B[...原创 2020-03-06 13:55:01 · 141 阅读 · 0 评论 -
剑指offer---求1+2+3+...+n
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路:使用递归来实现,但是递归需要有出口条件,而题目中不允许使用判断语句可以使用与运算(&&)来实现,即若与运算前面的值为假,则不会判断后面的值(与运算短路)class Solution {public: int ...原创 2020-03-06 13:34:24 · 128 阅读 · 0 评论 -
剑指offer---表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解题思路:该题判断条件比较多,所以需要格外小心可以设置三个标志位:sign表示是否存在+或者-decimal表示是否存在小数点has...原创 2020-03-06 11:49:29 · 103 阅读 · 0 评论 -
剑指offer---和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序...原创 2020-03-05 22:26:55 · 79 阅读 · 0 评论 -
剑指offer---和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。解题思路:因为数组是排序的数组,所以设置两个指针,一个指向数组的起始位置,一个指向数组的结束位置。当两个指针指向的数字之和为S时,此时就是两个数的乘积最小的时候。考虑数组中有负数的情况,此时也是最...原创 2020-03-05 21:59:20 · 973 阅读 · 0 评论 -
剑指offer---把字符串转换为整数
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例:输入:+2147483647 1a33输出:2147483647 0解题思路:该题需要注意字符串首字母为’+’,’-’,字母...原创 2020-03-05 21:09:00 · 128 阅读 · 0 评论 -
剑指offer---第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解题思路:利用辅助数组存放每次出现字符的次数,然后遍历字符串,第一个字符个数等于1的即为题目。该题与剑指offer—字符流中第一个不重复的数字剑指offer—数组中的重复数字解题思想类似,都是计数排序的思想。int...原创 2020-03-05 19:31:23 · 106 阅读 · 0 评论 -
剑指offer---字符流中第一个不重复的数字
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。解题思路:定义一个128的数组,然后用计数排序的思想,每次遍历一个字符,就在对应数组中++;然后判断辅助数组...原创 2020-03-05 18:58:59 · 155 阅读 · 0 评论 -
剑指offer---数组中的重复数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路:使用set容器,遍历数组时,将数字插入set容器中,判断当前是否插入成功,若成功,则继续遍历,若插入失败,则表...原创 2020-03-05 18:15:00 · 121 阅读 · 0 评论 -
剑指offer---顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路:可以先在纸上画出一个4x4的矩阵,然后定义四个变量,分别为行的起始下标rowBegin行的结束下标r...原创 2020-03-05 17:39:20 · 95 阅读 · 0 评论 -
剑指offer---数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解题思路:判断exponent是否大于0,大于零,直接计算base的exponent;小于零,则先计算base的exponent,然后再用1除。当然,也可以直接调用库函数,一行代码即可搞定:return pow(base,exp...原创 2020-03-05 15:34:40 · 92 阅读 · 0 评论 -
剑指offer---平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路:通过得出二叉树的高度,从而判断是否为平衡二叉树。平衡二叉树:是一棵二叉排序树,即二叉搜索树每个结点的左右子树的高度相差不超过1。平衡二叉树的介绍:关于平衡二叉树通过flag标志,在求二叉树的高度的时候,比较左右子树的高度相差值是否大于1。//计算数的高度,并判断是否为平衡二叉树 int getDepth(Tre...原创 2020-03-05 15:08:16 · 161 阅读 · 0 评论