随笔分类 - LeetCode
摘要:搞一个结果数组 ,用来存结果,先排序 ,对原数组扫一遍 ,如果原数组中当前元素的左区间值 要比结果数组中的最后一位的右区间 大的话,就将该元素插入进结果数组,此时这种情况是不存在交集。 如果不满足上面的条件,存在交集,进行更新结果数组中最后一位的右区间就可以了。
阅读全文
摘要:先分别排序,搞两个指针,从头开始对两个数组进行扫描,如果一个小一个大,就让小的往后走。如果相等那就存到结果数组中,然后两个指针同时往后走,循环到有一个遍历完就可以结束。
阅读全文
摘要:搞一个标记数组,模拟扫一遍。 这么写很麻烦,后续还会有优化。 未完待续...
阅读全文
摘要:找最大的周长,也就是$a+b+c$最大,如果三个数要想构成三角形的话,需要$a+b c$。固定$c$端点,使得$a+b$尽可能的大,所以排序扫一遍就ok了。 代码如下:
阅读全文
摘要:求解逆序对问题,首先基础方法就是归并排序,高阶方法可以用树状数组。 首先知道什么叫逆序对:对于一个序列$a$,如果$ia[j]$,则$a[i]$和$a[j]$构成逆序对。归并排序在 合并 的时候可以将求解逆序对作为子问题来求解,如果$a[p1]a[p2]$,那$p1 mid$的所有的值都比$a[p2
阅读全文
摘要:因为出现的都是小写字母,所以最多就有26个,用一个存储26个元素的数组来进行计数,正着扫,反着扫,循环,直到数组的所有位全为0,即可解决问题。 代码如下:
阅读全文
摘要:哈希大法好! 直接上代码 1 typedef struct HashTable { 2 int *data; 3 int *flag; 4 int size; 5 } HashTable; 6 7 HashTable *init(int n) { 8 HashTable *h = (HashTabl
阅读全文
摘要:int trap(int* height, int heightSize) { int ans = 0, top = -1; int *stack = (int *)malloc(sizeof(int) * heightSize); for (int i = 0; i < heightSize; i
阅读全文
摘要:struct Stack { char *val; int top, maxSize; }; void init(struct Stack *s, int maxSize) { s->val = malloc(maxSize); s->top = 0; } bool empty(struct Sta
阅读全文
摘要:利用滑动窗口加二分,其中二分的情况为前面全是1,后面全是0,找最后一个1出现的位置
阅读全文
摘要:直接上代码: double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { int nums[5000], numsSize = nums1Size + nums2Size; int i =
阅读全文
摘要:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 代码如下: 1 int reverse(int x) { 2 int temp = x, num = 0; 3 while (x) { 4 if (n
阅读全文
摘要:代码如下: 1 /** 2 * Note: The returned array must be malloced, assume caller calls free(). 3 */ 4 int* twoSum(int* nums, int numsSize, int target) { 5 sta
阅读全文

浙公网安备 33010602011771号