![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DataStructure
51VIP
这个作者很懒,什么都没留下…
展开
-
44. 通配符匹配
O(n),参考双指针贪心 int charArraySize(char *arr){ int i=-1; while(arr[++i]!='\0'){ } return i; } bool isMatch(char * s, char * p){ int i = 0, j = 0, iStar = -1, jStar = -1, m = charArr...转载 2020-03-30 23:06:09 · 96 阅读 · 0 评论 -
134. 加油站
O(n), 参考官方解释,注意边界值 int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize){ int currSum = 0, totalSum = 0 , startIdx = 0 ; for(int idx=0; idx<gasSize; idx++){ ...原创 2020-03-29 23:16:54 · 136 阅读 · 0 评论 -
跳跃游戏
暂时打卡原创 2020-03-28 22:58:21 · 127 阅读 · 0 评论 -
455. 分发饼干
O(nlog(n)) int cmp(const void * a, const void * b) { return * (int * )b - * (int * )a; } int findContentChildren(int* g, int gSize, int* s, int sSize){ qsort(g, gSize, sizeof(int), cmp); ...原创 2020-03-27 23:30:42 · 108 阅读 · 0 评论 -
392. 判断子序列
O(n) bool isSubsequence(char * s, char * t){ while(*t!='\0'){ if(*s=='\0'){ break; } if(*s==*t){ s++; } t++; } return *s=='...原创 2020-03-26 22:03:07 · 81 阅读 · 0 评论 -
99. 恢复二叉搜索树
int midOrder(struct TreeNode **pre, struct TreeNode **err1, struct TreeNode **err2, struct TreeNode *root) { if (root == NULL) return 0; if (midOrder(pre, err1, err2, root->left) == -1...转载 2020-03-24 23:08:34 · 72 阅读 · 0 评论 -
95. 不同的二叉搜索树 II
class Solution: def generateTrees(self, n): """ :type n: int :rtype: List[TreeNode] """ def generate_trees(start, end): if start > end: ...转载 2020-03-23 23:36:49 · 78 阅读 · 0 评论 -
94. 二叉树的中序遍历
O(n) /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void helper(struct TreeNode* node,int *rst,...原创 2020-03-22 23:47:53 · 76 阅读 · 0 评论 -
面试题55 - I. 二叉树的深度
O(n) /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ int max(int a,int b){ return a>b?a:...原创 2020-03-21 23:56:44 · 85 阅读 · 0 评论 -
面试题55 - I. 二叉树的深度
O(n) /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ int max(int a,int b){ return a>b?a:...原创 2020-03-21 23:48:14 · 64 阅读 · 0 评论 -
101. 对称二叉树
O(n) /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool mirror(struct TreeNode* left,struct Tr...原创 2020-03-20 21:45:58 · 67 阅读 · 0 评论 -
100. 相同的树
O(n),简单递归 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isSameTree(struct TreeNode* p, ...原创 2020-03-19 19:30:44 · 59 阅读 · 0 评论 -
10. 正则表达式匹配
转载自leetcode 解题思路 1、如果p为空,s为空匹配,s非空不匹配; 2、s非空,p == s || p == '.'时第一个字符匹配; 3、(p+1) != '',则递归判断剩下的是否匹配 first_match && isMatch(++s, ++p) 4、(p+1) == '*',则有两种情况匹配: a: *匹配0个字符,s匹配剩下的,即isMatch(s, p+2)...转载 2020-03-18 21:12:26 · 97 阅读 · 0 评论 -
5. 最长回文子串
这是我目前看到最舒服的一个了,这个有点复杂,今日先copy,再消化。 居然也有这个成绩,只能说给力。 void help(char *s, int N, int left, int right, int *start, int *len) { while (left >= 0 && right < N && s[left] == s[righ...转载 2020-03-17 20:57:00 · 68 阅读 · 0 评论 -
3. 无重复字符的最长子串
O(n) int lengthOfLongestSubstring(char * s){ int m[512]={-1}; int ptr=0; char c; int maxLen=0; int len=0; while((c=s[ptr++])!='\0'){ int idx=(int)c; if(m[idx]&g...原创 2020-03-16 23:49:04 · 59 阅读 · 0 评论 -
20. 有效的括号
O(n),为了优化空间的话可以动态按需分配栈空间能使用更小的空间,比如可以使用双向链表来优化,不过需要在链表的指针空间和测试用例中是长字符串快速不匹配还是长串临近结尾不匹配或直接匹配做权衡,如果是后者肯能带来更多的内存消耗. bool isValid(char * s){ char *stack=malloc(sizeof(char)*strlen(s)); int idx=0;...原创 2020-03-15 23:22:00 · 70 阅读 · 0 评论 -
14. 最长公共前缀
O(n),比较简单,不进行分析. char * longestCommonPrefix(char ** strs, int strsSize){ char *commomPrefix = malloc(500); int idx=0; while(strsSize>0){//这一个很奇怪的.... bool sameChar=true; ...原创 2020-03-14 23:54:16 · 85 阅读 · 0 评论 -
13. 罗马数字转整数
O(n),未完待续 int readANum(char *s){ char c=s[0]; if(c=='\0'){ return 0; } s=s[1]; if(c=='I'){ return 1; } return 0; } int romanToInt(char * s){ in...原创 2020-03-13 23:54:41 · 106 阅读 · 0 评论 -
23. Merge k Sorted Lists
时间;O(kn),空间:O(1),虽然第一遍效果不是很好,但就加了一个head->next=NULL就通过了,还是在没调试的情况下直接accept,这类似于手写代码,给自己点个赞。 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *ne...原创 2020-03-12 20:24:37 · 99 阅读 · 1 评论 -
19. 删除链表的倒数第N个节点
虽然是O(n),但是"O(2n)"应该尝试优化成O(n),这样在多\长链表用例才能占绝对优势. /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeNthFromE...原创 2020-03-11 22:59:52 · 61 阅读 · 0 评论 -
2. 两数相加
#include <stdio.h> #include <stdlib.h> #include <string.h> /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ #d...原创 2020-03-10 18:11:04 · 125 阅读 · 0 评论 -
141. 环形链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ bool hasCycle(struct ListNode *head) { struct ListNode *fast_p=head,*slow_p=h...原创 2020-03-09 23:37:21 · 55 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
开始首次自写,可能这个比较简单吧. /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteDuplicates(struct ListNode* head){ ...原创 2020-03-08 23:00:53 · 85 阅读 · 0 评论 -
21. 合并两个有序链表
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ struct ListNode*big,*little,*littlenext; if(l1&&l2){ big = (l1->val>=l2->val)?l1:...转载 2020-03-07 22:02:19 · 73 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III
连续3天了,惭愧,先坚持下来,保持打卡也是一种胜利,明天一定自己写 int max(int a, int b) { return (a>b)?a:b; } int min(int a, int b) { return (a<b)?a:b; } int maxProfit(int* prices, int pricesSize) { if ((NULL == pric...转载 2020-03-06 23:56:54 · 66 阅读 · 0 评论 -
16. 最接近的三数之和
今日全天解决问题去了,时间到了,先简单转载提交,马上自己做试试. int cmp(const void * a, const void * b) { return * (int * )a - * (int * )b; } int abs(int x) { if (x > 0) { return x; } else { return -...转载 2020-03-05 23:53:40 · 66 阅读 · 0 评论 -
15. 三数之和
/** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. * Note: Both returned array and *columnSizes array must be malloced, assume...转载 2020-03-04 21:17:45 · 55 阅读 · 0 评论 -
[27] 移除元素
/* * @lc app=leetcode.cn id=27 lang=c * * [27] 移除元素 */ // @lc code=start int removeElement(int* nums, int numsSize, int val){ if (numsSize<1){ return 0; } int pointer=0; ...原创 2020-03-03 15:11:24 · 60 阅读 · 0 评论 -
[26] 删除排序数组中的重复项
int removeDuplicates(int* nums, int numsSize){ if (numsSize<1){ return 0; } int pointer=0; for (int i = 1; i<numsSize; i++){ if (nums[pointer]!=nums[i]){ ...原创 2020-03-02 11:09:03 · 69 阅读 · 0 评论 -
SelectSort
SelectSort 选择排序的简单实现 package com.dxscx.sort; /** * @Author: admin@dxscx.com * @Time: 2016-8-11 下午3:34:26 * @Notice: What do you want to do? * @Version: v1.0 */ public class原创 2016-08-21 23:21:32 · 314 阅读 · 0 评论