![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣题目
文章平均质量分 50
marytime
捷径虽好,但有时路远点也有它独特的优势
展开
-
桶排序解题
220. 存在重复元素 III转自:https://leetcode-cn.com/problems/contains-duplicate-iii/solution/cun-zai-zhong-fu-yuan-su-iii-by-leetcode-bbkt/方法二:桶思路及算法我们也可以使用利用桶排序的思想解决本题。我们按照元素的大小进行分桶,维护一个滑动窗口内的元素对应的元素。对于元素 xx,其影响的区间为 [x - t, x + t][x−t,x+t]。于是我们可以设定桶的大小为 t.转载 2021-04-17 15:08:07 · 226 阅读 · 0 评论 -
355. 设计推特
这里「推特」,可以理解为中国的「微博」、「朋友圈」、「力扣」,真正的数据数需要存在数据库里的,并且还要加上一些非关系型的数据库(redis 等),不能是放在内存里的,这里只是简化了需求。分析:这是一类系统设计问题(上周我们做过的 LFU 缓存也是属于这一类问题),通常简化了很多需求,只要题目意思理解清楚,一般情况下不难写出,难在编码的细节和调试;这里需求 3 和需求 4,只需要维护「我关注的人的 id 列表」 即可,不需要维护「谁关注了我」,由于不需要维护有序性,为了删除和添加方便, 「我关注的人转载 2021-02-05 20:27:38 · 161 阅读 · 0 评论 -
迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离,这样把所有的点找遍之后就存下了起点到其原创 2020-05-15 15:12:17 · 376 阅读 · 0 评论 -
hash学习
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。具体的介绍网上有很详细的描述,如闲聊哈希表,这里就不再累述了;哈希表在像Java、C#等语言中是与生俱来的。可是在C的世界中,似乎只有自己动手,丰衣足食;在网上google了一把,大致有几个版本,我会一一来分析对比...转载 2020-04-20 16:54:28 · 271 阅读 · 0 评论 -
有向无环图判断问题(207. 课程表 C语言)
1.Kahn 算法有向图可以描述一种依赖关系该算法将有向图中指向一个点的边转变成该点的入度。indgree入度为0的点,是起始点,也就是有向图入口,没有其他点指向它,。 for(int i=0;i<n;i++){ if(!indegree[i])queue[rear++]=i; //入度为0,全部要加进队列中 ...原创 2020-04-24 19:44:19 · 978 阅读 · 0 评论 -
547.朋友圈解法(无向图的连通问题,邻接矩阵,C语言)
547. 朋友圈并查集方法intfind(inti,int*roots){while(i!=roots[i])i=roots[i];returni;}voidUnion(intx,inty,int*count,int*roots,int*rank){introotx=find(x,roots); //找到x的...原创 2020-04-06 15:31:36 · 724 阅读 · 0 评论 -
深度优先遍历(C语言)
深度优先遍历,起初学习深度优先一般都是用在图上的节点遍历。图的深度优先遍历是最直观的。详情见:https://blog.csdn.net/zuihongyan518/article/details/80823924摘抄如下:深度遍历算法的基本思想:图的深度遍历算法粗略的可以分为以下三步骤:(1)首先选定一个未被访问过的顶点V作为起始顶点(或者访问指定的起始顶点V),并将其标...原创 2020-03-29 16:33:36 · 3201 阅读 · 0 评论 -
LeetCode字符串题目汇总(C语言)
字符串题目大多数用滑动窗口法可以解决3. 无重复字符的最长子串int lengthOfLongestSubstring(char * s){ int len=strlen(s); if(len==0)return 0; int start=0,end=0; int flag[260]={0}; int maxlen=0; // for(in...原创 2020-03-23 20:04:21 · 711 阅读 · 0 评论 -
40. 组合总和 II (C语言)
113. 路径总和 II (C语言)用例1 :[1,0,1,1,2,0,-1,0,1,-1,0,-1,0,1,0]2用例2 :[-2,null,-3]-5temp[i++]=root->val;//开始用 path[*returnSize][i++]在用例1 中会出错,path[0][0]=1,path[0][1]=0。但是在回溯过程中,paht[1][0]没有被赋值。/...原创 2020-03-17 18:29:29 · 311 阅读 · 0 评论 -
滑动窗口题目总结
转自:https://leetcode-cn.com/problems/minimum-window-substring/solution/hua-dong-chuang-kou-suan-fa-tong-yong-si-xiang-by-/3. 无重复字符的最长子串最典型的滑动窗口题目right要找到新字符,才加1,扩大窗口left要发现旧字符就加1,缩小窗口,直到right处的...转载 2020-03-12 21:29:09 · 359 阅读 · 0 评论 -
322. 零钱兑换(C语言)BFS方法(与题目279. 完全平方数思路类似)
#define min(x,y) x<y?x:yint cmpfunc (const void * a, const void * b){ return ( *(int*)a - *(int*)b );}int coinChange(int* coins, int coinsSize, int amount){ int i, j, next, curr, size, ...原创 2020-02-15 14:19:45 · 317 阅读 · 0 评论 -
279. 完全平方数(C语言)BFS总结
BFS1.头结点入队,visited设置为12. 判断队列是否为空3.根据队列大小,得出该层有多少元素,依次出队,访问4.本题为求完全平方数的和,因此将层中的每个节点都与父节点相加,并且入队,且visited设为1。用step记录层数,next==n则返回。int numSquares(int n) { int i, j, next, curr, size, step...原创 2020-02-11 16:49:47 · 407 阅读 · 0 评论 -
堆排序和优先队列(215. 数组中的第K个最大元素,630. 课程表 III)
一、快速排序int cmpfunc (const void * a, const void * b){ return ( *(int*)a - *(int*)b );}int findKthLargest(int* nums, int numsSize, int k){ qsort(nums,numsSize,sizeof(int),cmpfunc); retu...原创 2020-02-09 10:45:33 · 159 阅读 · 0 评论 -
208. 实现 Trie (前缀树) C语言
typedef struct Trie{ char data; struct Trie*child[26]; int end;} Trie;/** Initialize your data structure here. */Trie* trieCreate() { Trie *trie=malloc(sizeof(*trie)); trie-&...原创 2020-02-08 11:12:54 · 504 阅读 · 0 评论 -
单链表(快慢指针法,翻转方法)
快慢指针法找到链表中点。 struct ListNode*slow=head,*fast=head; while(fast&&fast->next){ slow=slow->next; fast=fast->next->next; } 链表翻转方法 struct List...转载 2020-02-05 18:08:03 · 304 阅读 · 0 评论 -
146. LRU缓存机制(C语言)
参考自:https://github.com/Stand1210/c-LRU-/blob/master/LRU/lru_cache_impl.c 感谢博主,代码非常干净漂亮,学到很多。typedef struct cacheEntryS { int key; /* 数据的key */ int value; /* 数据的data */ struct cacheEntr...转载 2020-02-03 17:32:18 · 567 阅读 · 1 评论 -
排序练习 (C语言)和快排
给出一个数组,奇数序号降序,偶数序号升序,要求重排成重小到大的数组,时间复杂度为O(n)#include "sort.h"//给出一个数组,奇数序号降序,偶数序号升序,要求重排成重小到大的数组,时间复杂度为O(n)void main(){ int a[] = {1,20,2,18,3,2,4,1}; int lenth = 7; int b[10] = { 0 }; int...原创 2020-01-30 20:38:30 · 251 阅读 · 0 评论 -
141. 环形链表(C语言)简单题
一、哈希方法哈希方法,哈希计算写得一般,没有找到合适的哈希值计算方法。非常浪费空间。bool hasCycle(struct ListNode *head) { if(head==NULL)return false; struct ListNode *p=head; struct ListNode *q=head->next; long start=...原创 2020-01-30 16:06:11 · 226 阅读 · 0 评论 -
114. 二叉树展开为链表 (C语言)
while(pre->right)pre=pre->right; //while(pre)pre=pre->right; pre->right=root->right; //pre=root->right;错误,pre已经是一个空指针,pre=root->right,达不到串连节点的效果。void flatten(st...转载 2020-01-26 16:20:43 · 197 阅读 · 0 评论 -
78. 子集(C语言)回溯法
int** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) { int** ret = malloc(10000); int* buf = malloc(10000); *returnSize = 0; *returnColumnSizes = malloc(10000); backt...原创 2020-01-18 15:08:29 · 446 阅读 · 0 评论 -
动态规划题目汇总
70 .爬楼梯假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1...转载 2020-01-07 21:08:57 · 293 阅读 · 0 评论 -
102. 二叉树的层次遍历(C语言)
转自:作者:ruo-xian链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/cyu-yan-fei-di-gui-dui-lie-bfs-by-ruo-xian/来源:力扣(LeetCode)题目难度在于要按层存入数组。数组的行数控制由树的深度决定int depth = G...转载 2020-01-07 14:53:12 · 630 阅读 · 0 评论 -
56. 合并区间 (C语言)
按照区间的起始位置排序,从小到大。然后判断边界。int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes) { if(intervals == NULL || intervalsSize == 0) { ...原创 2020-01-04 17:11:31 · 3171 阅读 · 1 评论 -
39. 组合总和(C语言)
按照题解,仿写的C语言版本1. 一定要排序,从小值开始尝试才可以,如果不排序,target为负数时return关于qsort用法,转自https://www.cnblogs.com/wangxueliang/p/9346490.html七种sqort排序方法<本文中的排序都是采用从小到大的排序序列>int,double,char排序示例:#include&l...转载 2019-12-31 22:48:55 · 663 阅读 · 0 评论 -
38. 报数(C语言)and 41. 缺失的第一个正数
38. 报数int和char类型转换int num=2;char c=(char)(num+'0');char c='2';int n=(int )(c-'0');char * countAndSay(int n){ char *newstr=malloc(200*n); int k=0; if(n==1){ return "1"...原创 2019-12-29 12:11:12 · 115 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置(C语言)
笨办法,先找第一个等于target的位置,再找最后一个等于target的位置/** * Note: The returned array must be malloced, assume caller calls free(). */int* searchRange(int* nums, int numsSize, int target, int* returnSize){ ...原创 2019-12-28 17:40:34 · 639 阅读 · 0 评论 -
倍增法 29. 两数相除(C语言)
参考:https://leetcode-cn.com/problems/divide-two-integers/solution/po-su-de-xiang-fa-mei-you-wei-yun-suan-mei-you-yi-/参考:https://leetcode-cn.com/problems/divide-two-integers/solution/bei-zeng-fa-by-hu...转载 2019-12-24 20:27:48 · 445 阅读 · 0 评论 -
101. 对称二叉树(C语言)
bool Symmetric(struct TreeNode* lroot,struct TreeNode*rroot){ if(lroot==NULL&&rroot==NULL)return true; if(lroot==NULL||rroot==NULL)return false; return (lroot->val==rroot-&g...转载 2019-12-20 16:54:01 · 390 阅读 · 0 评论 -
145. 二叉树的后序遍历(C语言)非递归
int* postorderTraversal(struct TreeNode* root, int* returnSize){ int *ret=(int*)malloc(sizeof(int)*100); struct TreeNode** stack=(struct TreeNode**)malloc(sizeof(struct TreeNode*)*100); i...原创 2019-12-20 11:19:28 · 321 阅读 · 0 评论 -
144. 二叉树的前序遍历 C语言
题目是经典前序遍历,不同的是要把节点数据存到数组中,并返回 。解题要点就是把数组作为参数代入,随着循环存储节点数据。int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* ret =NULL; *returnSize=0; backtrack(root, returnSize, &ret)...转载 2019-12-18 22:04:19 · 239 阅读 · 0 评论 -
151. 翻转字符串里的单词 C语言
本地编译可以,力扣上面过不去,还没想出来,应该是指针用的有问题。#include <stdio.h>#include <string.h>char * reverseWords(char * s){ char *p=(char*)malloc(sizeof(char)*100); char *q=p; int j=strlen(s)-1,...原创 2019-12-17 11:38:50 · 176 阅读 · 0 评论 -
数据结构(C语言)回溯法与树的遍历(求子集,括号自动生成)
1.求含有N个元素的集合的子集可参考:https://blog.csdn.net/summer_dew/article/details/83921730求含n个元素的集合的幂集【注释】幂集:所有子集所组成的集合【举例】A={1,2,3}ρ(A) = { {1,2,3}, {1,2}, {1,3}, {1}, {2,3}, {2}, {3}, ∅ }(数据结构C语言版 p1...原创 2019-12-09 15:48:59 · 738 阅读 · 0 评论 -
23. 合并K个排序链表 C语言题解
合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge...原创 2019-12-07 10:32:11 · 149 阅读 · 0 评论