LeetCode
LeetCode刷题记录
ftzchina
这个作者很懒,什么都没留下…
展开
-
C语言----删除正整数序列中重复数据
删除正整数序列中重复数据原创 2022-11-15 21:10:39 · 846 阅读 · 0 评论 -
C语言----输出超完全数字不变数个数
输出超完全数字不变数个数原创 2022-10-07 14:10:13 · 1741 阅读 · 4 评论 -
C语言----计算两个数组对应元素的差值
计算两个数组对应元素的差值原创 2022-09-30 15:11:26 · 1842 阅读 · 0 评论 -
C语言----输出数组中最大值和次大值
输出数组中最大值和次大值原创 2022-09-29 20:33:45 · 3178 阅读 · 0 评论 -
C语言----将内存的内容转换为16进制表示的字符串
将内存的内容转换为16进制表示的字符串,一行snprintf搞定原创 2022-09-24 17:14:08 · 2134 阅读 · 0 评论 -
C语言----洗牌算法
洗牌算法原创 2022-09-08 17:14:04 · 1213 阅读 · 0 评论 -
C语言----计算0出现的个数
给定一个正整数,计算从0开始到这个正整数的所有整数中,0出现的个数原创 2022-09-02 11:11:26 · 2649 阅读 · 4 评论 -
C语言----多服务配置文件解析
多服务配置文件解析,结构体使用和字符串处理原创 2022-09-02 10:48:42 · 3096 阅读 · 1 评论 -
C语言----实现 Trie (前缀树或字典树)
用了这么多年的命令补齐,之前也没想过命令补齐是怎么去实现的,正好该题有机会去了解这种数据结构,字典树。对于插入一个单词,就是从字典树的根节点每个字母依次按照树形结构插入直到单词结束,比如我要插入两个单词,china和check,其结构如下插入字符串我们从字典树的根开始,插入字符串。对于当前字符对应的子节点,有两种情况:1,子节点存在。沿着指针移动到子节点,继续处理下一个字符。2,子节点不存在。创建一个新的子节点,记录在 c...原创 2021-12-30 09:28:24 · 1247 阅读 · 7 评论 -
C语言----扫雷游戏
扫雷游戏本题设置了四个规则:1,如果一个地雷('M')被挖出,游戏就结束了- 把它改为'X' 。2,如果一个 没有相邻地雷 的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的 未挖出 方块都应该被递归地揭露。3,如果一个 至少与一个地雷相邻 的空方块('E')被挖出,修改它为数字('1' 到 '8' ),表示相邻地雷的数量。4,如果在此次点击中,若无更多方块可被揭露,则返回盘面。解题思路:1,从给出的点出发,如果该点很不幸就是雷,置为'X',game over...原创 2021-12-17 18:13:16 · 7299 阅读 · 0 评论 -
C语言---- 喧闹和富有
解题思路:1,按照richer数组创建邻接矩阵,不过要注意一下指向,从穷人指向富人2,从任意一点出发dfs搜索,能遍历到的点就是比当前点富有的人,然后按照题目要求保存按净值小的人/** * Note: The returned array must be malloced, assume caller calls free(). */int dfs(int poorId, int *ret, int *quiet, int **matrix, int quietSize){...原创 2021-12-15 19:37:35 · 1324 阅读 · 0 评论 -
C语言----设计前中后队列
本题就是手撸数据结构中基本的队列结构,常用的有两种,一种是用链表实现,一种是数组实现。本文将会给出两种实现方式1,数组实现typedef struct { int value[1000]; int len;} FrontMiddleBackQueue;FrontMiddleBackQueue* frontMiddleBackQueueCreate() { FrontMiddleBackQueue *queue = (FrontMiddleB...原创 2021-12-14 14:11:14 · 1828 阅读 · 0 评论 -
C语言----保持城市天际线
解题思路:该题我想到的就是用粗暴的方式1,求出每行每列的最大值2,取二维数组中每个位置行列的最小值,然后减去当前值就是得到的当前位置可以增加的值3,依次累加就是题目答案#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)<(y)?(x):(y))int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize){ ...原创 2021-12-13 10:17:20 · 756 阅读 · 0 评论 -
C语言----最短补全词
解题思路:1,利用hash思想,遍历licensePlate,建立hash数组2,依次遍历words中的每个单词,判断是否满足补全词3,满足补全词则加入到定义的结构体中4,对结构体中的len进行排序取len最小的单词代码简单易懂,如下int LOWERWORD(int X) { if(X >= 'A' && X <= 'Z') X -= 'A'; else if(X >= 'a' && ...原创 2021-12-11 11:14:48 · 660 阅读 · 0 评论 -
C语言----尽量减少恶意软件的传播
该题特考验语文水平,在leetcode上找到了一个通俗易懂的中文翻译: /** * 从初始列表中删除一个节点。如果移除这一节点将最小化 M(initial),则返回该节点 * 解题思路 [阅读理解] * 1、理解题意:题目描述很不易理解,首先理解输入graph、initial; 输出 求初始列表中的一个节点,移除这一节点将最小化感染 * a. 输入graph表示每个节点与其他节点的联通情况,以题目中示例一举例 graph = [[1,1,0],...原创 2021-12-09 15:17:50 · 2156 阅读 · 1 评论 -
C语言----打家劫舍(leetcode三题汇总)
目录一:打家劫舍二:打家窃舍II三:打家劫舍III一:打家劫舍解题思路:该题用动态规划求解,简单易懂1,抢劫的房屋数少于两个情况(包含两个),如果就一个房屋,则肯定就抢他了,别无他家;如果房屋有两家,则抢劫富有的那家2,抢劫的房屋数大于两个,这会就该想想转移方程怎么写了,小偷光顾到了第i家,这时候小偷有两个选择,偷或者不偷,假如小偷不偷第i家,则此时小偷已经偷到的钱为dp[i-1],假如小偷要偷第i家,则小偷偷到的是dp[i-2]+nums[i]。从i-2家偷过来肯定是.原创 2021-11-25 19:42:21 · 3876 阅读 · 2 评论 -
C语言----亲密字符串
该题的模式为简单,但是说实话这题做出来完全就是靠失败的用例一点点补充起来的,要想一次通过感觉还是很难的。 解题思路:此题可以分为三种大的情况去考虑1,字符串相等,则只需要至少有两个字符相等则满足亲密字符串要求2,字符串不等并且长度都不一致,则不满足要求3,字符串不等,长度一致,则逐次比较相同位置上的字符串,如果字符串不等,则保存相减的值和其中的一个字符串。如果两次不等的值相加等于0,并且不相等的字符串相等,则满足bool buddyStrin...原创 2021-11-23 14:40:15 · 792 阅读 · 0 评论 -
C语言----最长和谐子序列
初步看到题,还以为简单,不过仔细想想也不简单。本题解题思路采用滑动窗口方法,用两个指针构成一个窗口,满足条件的元素进窗口,不满足条件移动窗口。下面就是详细的解题思路,有五个元素1,2,2,3,41,采用滑动窗口的前提是数组元素是有序的,首先对数组排序2,begin就是窗口的左边,end就是窗口的右边,元素进窗口的条件是arr[end] - arr[begin] = 1,因为经过排序后数组是有序的,最右边就是最大的,最左边是最小的3,如果右边的元素满足条件,end++,...原创 2021-11-20 17:39:31 · 1073 阅读 · 0 评论 -
C语言----二叉树的坡度
解题思路:对于二叉树我们不用过分纠结全部的二叉树我们该如何如何处理,我们只需要截取其中的一棵子树单独拿出来分析,思路清晰之后再进行递归那就好理解了,我们用dfs思想1,对于节点14,其节点的坡度就是左子树的总和减去右子树的总和2,用dfs就是回溯,那么节点14应该向上返回什么呢?---节点14的左右子树和加上其自身的节点值理解了上述两个步骤,那么解题就简单了/** * Definition for a binary tree node. * s...原创 2021-11-18 19:35:16 · 1036 阅读 · 0 评论 -
C语言----最小路径和
一切思路尽在代码中,每一步都有详细的介绍int minPathSum(int** grid, int gridSize, int* gridColSize){ int rows = gridSize; int col = gridColSize[0]; int **dp = (int**)malloc(rows*sizeof(int*)); int i,j; for(i=0; i<rows; i++) { dp[...原创 2021-11-13 16:56:40 · 1080 阅读 · 0 评论 -
C语言----两两交换链表中的节点
纯C语言链表操作思路:1,定义三个指针,pre,preNext,temp2,pre指向相邻节点的第一个节点,preNext指向相邻节点的第二个节点,temp指向pre,temp的作用是保持上一组相邻节点和下一组相邻节点的联系3,操作pre和preNext,交换两个相邻节点4,temp作为上一组相邻节点的第二节点的指针,指向交换好的下一组节点第一指针/** * Definition for singly-linked list. * struct ListNode { * ...原创 2021-11-13 12:20:36 · 3422 阅读 · 2 评论 -
C语言----复原 IP 地址
此题用dfs回溯#define NUM_MAX 100void backtrack(char *s, int s_len, int step, char **p, int *returnSize, char **a){ int i = 0; // 用于选择列表扩展,字符从选1个至3个 char temp[4]; // 用于临时存储选择后的字符串 int num = 0; // 用于将选择后的字符串转化为int类型做合法判断 c...原创 2021-09-07 21:01:21 · 642 阅读 · 0 评论 -
C语言----大数乘法
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param s string字符串 第一个整数 * @param t string字符串 第二个整数 * @return string字符串 */char* solve(char* s, char* t ) { int lens=strlen(s),lent=strlen(t),lenm=lens+lent;// write code here int result[lenm],.原创 2021-09-04 23:16:32 · 153 阅读 · 0 评论 -
C语言----字符串出现次数的TopK问题
解题思路:一:暴力解题 1,定义一个结构体,指向字符串和该字符串对应的次数,用结构体数组存放结果 2,两层循环遍历,外层循环遍历输入的字符数组,内存循环遍历结构体数组,如果在结构体数组中没有找到该字符串,则加入该字符串,并将num置1,如果找到的话,num++ 3,对结构体数组按num进行排序 4,申请空间存放topk的结果二:借助qsort快速排序的库函数 1,定义一个结构体,指向字符串和该字符串...原创 2021-09-04 10:03:31 · 427 阅读 · 1 评论 -
C语言----常见的排序算法
总结了一下C语言常见的排序算法,包括1,选择排序2,插入排序3,希尔排序4,归并排序5,快速排序6,冒泡排序7,堆排序#include <stdio.h>#include <stdlib.h>/*选择排序算法*/void selectSort(int *a,int n){ int i,j; int tmp; for(i=0; i<n-1; i++) { int min = i; for(j = i+1; j<n;.原创 2021-08-29 21:57:43 · 255 阅读 · 0 评论 -
C语言----链表中的节点每k个一组翻转
题解:本题采用递归的方法/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ ListNode* reverseKGroup(ListNode*...原创 2021-08-28 10:17:26 · 330 阅读 · 0 评论 -
C语言----正则表达式匹配
详细思路在代码的每行代码中都有注释/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @param pattern string字符串 * @return bool布尔型 */#include <stdbool.h>bool core(char* str, char* pattern){ if(str[0] == 0 && pattern[0] ==...原创 2021-08-22 16:46:56 · 1744 阅读 · 0 评论 -
C语言----在两个长度相等的排序数组中找到上中位数
/** * find median in two sorted array * @param arr1 int整型一维数组 the array1 * @param arr1Len int arr1数组长度 * @param arr2 int整型一维数组 the array2 * @param arr2Len int arr2数组长度 * @return int整型 */int findMedianinTwoSortedAray(int* arr1, int arr1Len, int* ...原创 2021-08-15 16:06:38 · 161 阅读 · 0 评论 -
C语言----表达式求值
解题思路都在代码的注释中,非常详细,相信都能看懂/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */int solve(char* s ) { // write code here int res = 0; int sum[500] = {0}; //由于题目没有指出s长度,就拍脑袋决定的500,不够可以手动调...原创 2021-08-15 12:32:26 · 438 阅读 · 0 评论 -
C语言----二叉树相关
1,平衡二叉树/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; *//** * * @param pRoot TreeNode类 * @return bool布尔型 */int depth(struct TreeNode* pRoot){ if(pRoot == NULL) return 0; int left = d原创 2021-08-12 22:16:35 · 357 阅读 · 0 评论 -
C语言----最长公共子串(动态规划)
定义dp[i][j]表示字符串str1中第i个字符和str2种第j个字符为最后一个元素所构成的最长公共子串。如果要求dp[i][j],也就是str1的第i个字符和str2的第j个字符为最后一个元素所构成的最长公共子串,我们首先需要判断这两个字符是否相等。 如果不相等,那么他们就不能构成公共子串,也就是dp[i][j]=0; 如果相等,我们还需要计算前面相等字符的个数,其实就是dp[i-1][j-1],所以dp[i][j]=dp[i-1][j-1]+1; 有了递推公式,代码就...原创 2021-08-10 21:32:09 · 9216 阅读 · 1 评论 -
C语言----合并两个有序列表
思路:链表操作最重要的就是头,合并两个有序链表,合并后的链表头常规操作有两种,一是malloc一个实体头,二是选其中一个链表的头来当新头。用第一种记得函数返回的时候用->next,再释放申请的头,不然会造成内存泄漏。在此用的第二种方法1,比较两个链表的头节点值,值小的那个链表头当合并后链表的头2,申请一个尾指针,最开始指向头节点3,循环比较两个链表的节点值,谁小就接到尾节点上去4,最后跳出循环,如果有一个链表没有扫描完,把未扫描完的链表直接接到尾节点后面,因为原始链表也是有序的...原创 2021-08-07 11:13:28 · 1573 阅读 · 0 评论 -
C语言----堆排序、快速排序(寻找第K大)
在学习堆排序之前,首先需要了解堆的含义:在含有 n 个元素的序列中,如果序列中的元素满足下面其中一种关系时,此序列可以称之为堆。ki≤ k2i且 ki≤ k2i+1(在 n 个记录的范围内,第 i 个关键字的值小于第 2*i 个关键字,同时也小于第 2*i+1 个关键字),这是小顶堆 ki≥ k2i且 ki≥ k2i+1(在 n 个记录的范围内,第 i 个关键字的值大于第 2*i 个关键字,同时也大于第 2*i+1 个关键字),这是大顶堆对于堆的定义也可...原创 2021-08-04 19:37:16 · 1620 阅读 · 0 评论 -
C语言----实现二叉树先序,中序和后序遍历
就是正常的二叉树遍历,写代码的时候注意二维数组的操作/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; *//** * * @param root TreeNode类 the root of binary tree * @return int整型二维数组 * @return int* returnSize 返回数组行数 * @return ...原创 2021-08-03 20:03:31 · 725 阅读 · 0 评论 -
C语言----设计LRU缓存结构
用双向链表,头插法,思路很简单链表头是最常访问的地方,链表尾是最不常访问的地方:1,如果操作为1,说明要加入到链表,插入到表头2,如果操作为2,说明节点被访问,从当前节点删除并移动到表头其中要考虑到缓冲区的大小,即链表长度,如果加入前链表长度已经到了最大,则需要删除链表尾节点,再加入/** * lru design * @param operators int整型二维数组 the ops * @param operatorsRowLen int operator...原创 2021-08-01 22:04:13 · 412 阅读 · 0 评论 -
C语言----快速排序
没有限定算法,一开始用的冒泡,超时,改用了快速排序/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @param arrLen int arr数组长度 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */int getIndex(int *arr,int low,int high){ int ...原创 2021-08-01 19:08:29 · 127 阅读 · 0 评论 -
C语言----反转链表
描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}这是牛客网上的一道题,反转链表,给的接口是struct ListNode* ReverseList(struct ListNode* pHead )拿到提首先想到的是用头插法,但是头插法的前提是得有一个头,本来想复用原链表的头,但是最后做出来发现原链表的头存储了数据,如果采用头插法则需要自己申请一个头,但这样会存在一个问题,头没法释放,会造成内存泄漏,先给出代码,典型的头插...原创 2021-07-31 23:41:06 · 647 阅读 · 1 评论 -
C语言----减小和重新排列数组后的最大元素
给你一个正整数数组arr。请你对 arr执行一些操作(也可以不进行任何操作),使得数组满足以下条件:arr中 第一个元素必须为1。任意相邻两个元素的差的绝对值 小于等于1,也就是说,对于任意的 1 <= i < arr.length(数组下标从 0 开始),都满足abs(arr[i] - arr[i - 1]) <= 1。abs(x)为x的绝对值。你可以执行以下 2 种操作任意次:1, 减小 arr中任意元素的值,使其变为一个 更小的正整数。...原创 2021-07-15 21:50:20 · 584 阅读 · 0 评论 -
C语言----前序遍历构造二叉搜索树
返回与给定前序遍历preorder 相匹配的二叉搜索树(binary search tree)的根结点。(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于node.left的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,前序遍历首先显示节点node 的值,然后遍历 node.left,接着遍历 node.right。)题目保证,对于给定的测试用例,总能找到满足要求的二叉搜索树。来源:力扣(L...原创 2021-07-01 19:31:24 · 1237 阅读 · 1 评论 -
C语言----串联字符串的最大长度
题目:串联字符串的最大长度给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。请返回所有可行解 s 中最长长度。 示例 1:输入:arr = ["un","iq","ue"]输出:4解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 4。示例 2:输入:arr = ["cha","r","act","ers"]输出:6解释:原创 2021-06-21 19:11:59 · 711 阅读 · 0 评论