
算法题
一些算法题和代码
爱吃草莓蛋糕的猴
徘徊在头秃边缘的程序猿
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
111.二叉树的最小深度 -----力扣每日打卡Day17
目录1.题目2.题目分析3.代码实现1.题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.C语言函数头:/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-08-21 17:03:29 · 333 阅读 · 0 评论 -
110.平衡二叉树
目录1.题目2.题目分析3.代码实现4.代码改进1.题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2原创 2020-08-17 14:11:55 · 406 阅读 · 0 评论 -
130.被围绕的区域 -----力扣每日打卡Day16
目录1.题目2.题目分析3.代码实现1.题目给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最原创 2020-08-11 14:13:13 · 250 阅读 · 0 评论 -
696.计数二进制子串 -----力扣每日打卡Day15
目录1.题目2.题目分析3.代码实现4.代码优化1.题目给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(原创 2020-08-10 21:12:29 · 357 阅读 · 0 评论 -
99.回复二叉树搜索树 -----力扣每日打卡Day14
目录1.题目2.题目分析3.代码实现总结:1.题目二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 / 1 \ 2示例 2:输入: [3,1,4,null,null,2] 3 / \1 4 / 2输出: [2,1,4,null,null,3] 2 / \1原创 2020-08-08 20:00:12 · 310 阅读 · 3 评论 -
337.打家劫舍 ||| ------力扣每日打卡 Day13
目录1.题目2.题目分析3.DFS代码实现1.题目在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3 / \原创 2020-08-05 16:44:48 · 258 阅读 · 0 评论 -
415.字符串相加 -----力扣每日打卡Day12
目录1.题目2.题目分析3.代码实现1.题目给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。C语言函数头:char * addStrings(char * num1, char * num2){}来源:力扣(LeetCode) 戳我前往题原创 2020-08-03 14:12:59 · 246 阅读 · 0 评论 -
121.买卖股票的最佳时机 -力扣
目录1.题目2.题目分析3.代码实现1.题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最 大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格原创 2020-08-01 19:48:32 · 198 阅读 · 0 评论 -
面试题 08.03.魔术索引 ----- 力扣每日打卡Day11
目录1.题目2.题目分析3.暴力解决代码4.二分法优化代码1.题目魔术索引。 在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。示例1: 输入:nums = [0, 2, 3, 4, 5] 输出:0 说明: 0下标的元素为0示例2: 输入:nums = [1, 1, 1] 输出:1说明: 此题为原书中的 Follow-原创 2020-07-31 12:09:43 · 277 阅读 · 0 评论 -
343.整数拆分(三种方法)-----力扣每日打卡Day10
目录1.题目2.题目分析3.动态规划代码4.动态规划的优化5.数学归纳法总结:1.题目给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。C语言函数头:int integerBreak(in原创 2020-07-30 12:24:23 · 595 阅读 · 0 评论 -
104.二叉树的最大深度 ------力扣每日打卡Day9
目录1.题目2.题目分析3.代码实现1.题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。C语言函数头:/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-07-29 11:17:37 · 192 阅读 · 0 评论 -
392.判断子序列 -----力扣每日打卡Day8
目录1.题目2.题目分析3.初始代码4.官方的究极简洁改进代码1.题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = “abc”, t = “ahbgdc”原创 2020-07-27 20:32:37 · 134 阅读 · 0 评论 -
329.矩阵中的最长递增路径 -----力扣每日打卡Day7
目录1.题目2.题目分析3.代码实现4.总结1.题目给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。示例2:输入: nums = [ [3,4,5], [3,2,6], [2,2,1]] 输出: 4原创 2020-07-27 20:20:18 · 218 阅读 · 0 评论 -
410.分割数组的最大值 (二分法)------ 力扣每日打卡Day6
目录1.题目2.题目分析3.代码二分法实现4.总结1.题目给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)来源:力扣(LeetCode)戳我前往题目示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分原创 2020-07-25 18:07:45 · 518 阅读 · 0 评论 -
1025.除数博弈 -----力扣每日打卡Day5
目录1.题目2.题目分析3.动态规划代码实现4.究极解答 —— 找规律代码:1.题目爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2原创 2020-07-24 12:12:32 · 444 阅读 · 0 评论 -
64.最小路径和 (动态规划题)------力扣每日打卡Day4
最小路径和1.题目2.题目分析(1)初始条件(2)迭代规律3.代码实现总结:1.题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。C语言函数头:int minPathSum(int** grid, int gridSize, int* gridCol原创 2020-07-23 11:32:52 · 320 阅读 · 0 评论 -
剑指 Offer 11.旋转数组的最小数字 ------力扣每日打卡Day3
剑指Offer 11.旋转数组的最小数字1.题目2.题目分析情况1.mid < high情况2.mid > high情况3.low = high3.代码1.暴力破解2.二分法注:mid = (high - low)/2 + low1.题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,原创 2020-07-22 12:11:11 · 376 阅读 · 0 评论 -
95.不同的二叉搜索树 || -----力扣每日打卡Day2
1.题目给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3原创 2020-07-21 12:18:45 · 151 阅读 · 0 评论 -
167.两数之和 || - 输入有序数组 力扣每日打卡Day1
1.题目给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 =原创 2020-07-20 21:50:25 · 124 阅读 · 1 评论 -
三步问题(输入较大数据)-----从递归到动态规划的最优解四步法
01.问题描述三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。n范围在[1, 1000000]之间。函数调用:int waysToStep(int n)02.问题分析首先我们可以看到这道题的数据很大,这个对编程者也是很大的一个挑战。我们很多人看到的第一个想法应该是...原创 2020-03-16 22:30:48 · 443 阅读 · 0 评论 -
经典动态规划题型 ------爬楼梯
1.题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。2.分析题目题目看起来很简单,这是一个一维数组的动态规划。动态规划类型的题,一般要从初始条件开始看,一阶一阶地计算,这样子就会比较简单。动态规划初始条件:一般要有两个或两个以上的初始条件。1阶,一种方法;2阶,两种方法;(注...原创 2020-03-13 11:27:53 · 519 阅读 · 0 评论 -
一元多项式的乘法与加法运算的C语言实现
用结构体不用说了,现在只写了数组,以后把链表补上。#include<stdio.h>typedef struct shu{ int xi; int zhi;}SHU;SHU zu1[100],zu2[100],chen[100],jia[100];void shuru1(int n) //输入上面一行的多项式{ int i; for(i=0;i<n;i++...原创 2020-03-09 17:19:35 · 1438 阅读 · 2 评论