![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
dsad
qq_45992231
这个作者很懒,什么都没留下…
展开
-
输出n2顺转方阵
【代码】输出n2顺转方阵。原创 2022-09-23 19:57:56 · 191 阅读 · 1 评论 -
将数转化为二进制,并8位输出一个空格
【代码】将数转化为二进制,并8位输出一个空格。原创 2022-09-23 19:22:27 · 205 阅读 · 0 评论 -
leetcode统计字符串中的单词数
原问题转化为求字符串中单词的第一个下标的个数class Solution {public:int countSegments(string s) {int segmentCount = 0; for (int i = 0; i < s.size(); i++) { if ((i == 0 || s[i - 1] == ' ') && s[i] != ' ') { segmentCount++; } }转载 2021-10-07 11:01:51 · 219 阅读 · 0 评论 -
leetcode 482 密钥格式化
自己的代码class Solution {public: string licenseKeyFormatting(string s, int k) { string ans=""; int num=0; int len=s.length(); for(int i=0;i<len;i++) { if(s[i]!='-') { ans+=s[i];转载 2021-10-04 20:15:11 · 93 阅读 · 0 评论 -
leetcode 261周赛
题A:只要每扫描到一个X 就把它以及它之后的两个变为O题C:把数分成三类余数为0,1,2 即n0,n1,n2则产生的序列顺序是确定的1 1 2 1 2 1 2……或2 2 1 2 1 2 1……当n0为偶数,不改变Alice和Bob选择的轮次当出现1 1 2 1 2 1 2 2这样的时候即n2>=n1 Bob输2 2 1 2 1 2 1 1 即n1>=n2 Bob输当n0为奇数 则最后一个0肯定是Bob选的1 1 2 1 2 0 1 1 n1-n2>=3Bob输原创 2021-10-03 14:19:35 · 84 阅读 · 0 评论 -
leetcode 166 分数到小数 余数
numerator/denomerator为整数部分上步的余数部分乘以10/denomerator为第一位小数上步的余数部分乘以10/denomerator为第二位小数………………如何找到循环节呢?如果有一步的余数已经出现过了 就代表循环节已经出现...转载 2021-10-03 09:41:33 · 123 阅读 · 0 评论 -
leetcode 405 数字转换成16进制数
char changeTochar(int num) //把0-15的数转换成字符{ if(num>=0&&num<=9) { return num+'0'; } else { return num-10+'a'; }}char * toHex(int num){ char* ans=(char*)malloc(sizeof(char)*9); if(num==0) {原创 2021-10-02 11:12:50 · 90 阅读 · 0 评论 -
leetcode 1436
class Solution {public: unordered_map<string,string> mp; string destCity(vector<vector<string>>& paths) { for(int i=0;i<paths.size();i++) { mp[paths[i][0]]=paths[i][1]; } string原创 2021-10-01 09:00:05 · 87 阅读 · 0 评论 -
leetcode 223 通过x,y方向上的投影判断矩形是否相交 和求矩形相交的面积
官方题解#define MAX(x,y) (x>y?x:y)#define MIN(x,y) (x<y?x:y)int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2){ int a=(ax2-ax1)*(ay2-ay1);int b=(bx2-bx1)*(by2-by1); int tx=MIN(ax2,bx2)-MAX(ax1,bx1); int转载 2021-09-30 10:26:40 · 190 阅读 · 0 评论 -
leetcode437 路径总和3 寻找总和为targetsum的路径
两层dfs 第一层dfs找根节点,第二层dfs从根节点开始找路径时间复杂度O(n2)/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */void dfs(struct TreeNode* proot,int sum,int*ans,int targetSum)原创 2021-09-28 18:52:41 · 96 阅读 · 0 评论 -
leetcode 639 解码方法 2
DP 从前面的推到后面的枚举前面的情况就可以了注意取余的操作 中间的值有可能超过int表示的范围 需要用long long 暂存,不然的话,需要用循环 每次加到结果上面再取余,确保int值能够存放 导致On的常数比较大#define MOD 1000000007int numDecodings(char * s){ int len=strlen(s); if(len==1) { if(s[0]=='0') return 0;原创 2021-09-27 19:25:59 · 76 阅读 · 0 评论 -
leetcode 371 不用+ - 实现求两整数的和
一开始想到了一个方法但是只能实现正整数的运算int getSum(int a, int b){ int t=1; int t1,t2; int c=0; int k; while(t<=a||t<=b) { //printf("t=%") t1=a&t; t2=b&t; printf("t1=%d,t2=%d\n",t1,t2); if(t1==0&&转载 2021-09-26 11:42:34 · 74 阅读 · 0 评论 -
leetcode 583 删除两个字符串中的字符,使得两个字符变成最长公共子序列
最长公共子序列变题#define MAXN 1010;#define MIN(x,y) (x<y?x:y)int minDistance(char * word1, char * word2){ int len1=strlen(word1); int len2=strlen(word2); int dp[len1+1][len2+1]; for(int i=0;i<=len1;i++) { dp[i][0]=i; }原创 2021-09-25 11:52:04 · 92 阅读 · 0 评论 -
leetcode430 扁平化多级双向链表
我的方法是用DFS 一开始想直接在head链表的基础上进行修改结果发现单纯的dfs不行,因为当遍历的有子节点的结点时可以改变这两个结点间的链接关系,但是当一个分支全部遍历完毕之后,还要回到上一级,就是上个有孩子结点的那个结点的后一个结点,所以就需要把这些需要结点都要保存下来,有2个结点就要保存2个,有100个结点就要保存100个但从传递参数的角度来看,是不现实的。理论上可以传递一个栈的指针,用栈来保存这些结点,但一个分支结束时,弹出栈顶指针就可以实际上采用的方法是dfs遍历每个结点然后加入到新的链表中。原创 2021-09-24 19:22:11 · 84 阅读 · 0 评论 -
leetcode 725 链表的分割
我的想法是每组的个数是当前的cnt/当前的k 再向上取整struct ListNode** splitListToParts(struct ListNode* head, int k, int* returnSize){ struct ListNode** ans=(struct ListNode**)malloc(sizeof(struct ListNode*)*k); struct ListNode* p=head; int cnt=0; whi转载 2021-09-22 18:59:51 · 70 阅读 · 0 评论 -
leetcode 3 无重复字符串的最长子串
暴力int lengthOfLongestSubstring(char * s){ int len=strlen(s); if(len==0) return 0; int dp[len]; dp[0]=1; int maxlen=1; int j; for(int i=1;i<len;i++) { for(j=i-1;j>=i-dp[i-1];j--) { if原创 2021-09-21 16:26:12 · 60 阅读 · 0 评论 -
leetcode 两数相加 链表 逆序
自己的代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ int c=0; int sum; struct ListNode* head=NUL原创 2021-09-21 15:46:06 · 97 阅读 · 0 评论 -
leetcode 673最长递增自序列的个数 二分查找 *
O(n2)比较慢#define MAX(x,y) (x>y?x:y)int findNumberOfLIS(int* nums, int numsSize){ int len[numsSize];//存储以nums[i]为结尾的最长子序列的长度 int cnt[numsSize];//存储以nums[i]为结尾的最长子序列的个数 int ans[numsSize+1];//存储长度为i的最长子序列的个数 memset(len,0,sizeof(len));原创 2021-09-21 14:34:51 · 57 阅读 · 0 评论 -
leetcode 36 有效的数独
暴力class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { set<char> st; //测试每一行上是否有相同的数字 for(int i=0;i<9;i++) { st.clear(); for(int j=0;j<9;j++)原创 2021-09-17 18:26:31 · 51 阅读 · 0 评论 -
leetcode 162 寻找峰值 二分
递归写法int binary_search(int* nums,int left,int right){ if(left==right) return left; int mid=(left+right)>>1; if(nums[mid]<nums[mid+1]) return binary_search(nums,mid+1,right); else return binary_search(nums,left原创 2021-09-15 20:04:24 · 63 阅读 · 0 评论 -
leetcode 524子序列匹配问题 字典序大小比较
char * findLongestWord(char * s, char ** dictionary, int dictionarySize){ int p=-1; char *ans=""; int len_of_s=strlen(s); int dp[len_of_s+1][26]; for(int i=0;i<26;i++) dp[len_of_s][i]=len_of_s; for(int i=len_of_s-原创 2021-09-14 21:38:43 · 129 阅读 · 0 评论 -
leetcode 678 有效的括号字符串
栈class Solution {public: bool checkValidString(string s) { stack<int> st1; stack<int> st2; int len=s.length(); for(int i=0;i<len;i++) { if(s[i]=='*') { st2.push(i)转载 2021-09-12 16:11:51 · 60 阅读 · 0 评论 -
leetcode 600小于等于n中不含连续1的非负整数
官方题解通过字典树将n的情况变成一棵树中的路径情况官方题解中的高度实际上是叶节点标为1,从叶节点往上数数到目标结点的数,并不是从目标结点到叶节点的边数官方题解中的完全二叉树也存疑实际上整个操作就是不停地从最高位取数,如果连续取到了两个1就终止不然的话 就加上和1相同高度的那个0的结果,因为在1的那个位置上填0的数比n小,最后到叶节点实际上就是加上全0的这种情况int findIntegers(int n){ int dp[30]; dp[0]=1;dp[1]=2; for原创 2021-09-11 17:25:51 · 89 阅读 · 0 评论 -
leetcode 68 模拟
不能说写的很烂,只能说写的非常烂/** * Note: The returned array must be malloced, assume caller calls free(). */char ** fullJustify(char ** words, int wordsSize, int maxWidth, int* returnSize){ char** ans=(char**)malloc(wordsSize*sizeof(char*)); int index=0;原创 2021-09-09 14:01:11 · 81 阅读 · 0 评论 -
leetcode IPO
贪心+堆(每次选择最大的,所以用堆来维护)typedef pair<int,int> pii;class Solution {public: int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) { int n = profits.size(); int curr = 0; prio转载 2021-09-08 18:50:35 · 52 阅读 · 0 评论 -
leetcode 1221 分割平衡字符串
int balancedStringSplit(char * s){ int num_of_l=0; int num_of_r=0; int num_of_ans=0; int len=strlen(s); for(int i=0;i<len;i++) { if(s[i]=='L') num_of_l++; if(s[i]=='R') num_of_r++; if(num_o原创 2021-09-07 16:57:51 · 94 阅读 · 0 评论 -
最小K个数 排序 优先队列 快排
方法一:排序方法二:优先队列,维护最小K个数class Solution {public: vector<int> smallestK(vector<int>& arr, int k) { vector<int> ans(k,0); if(k==0) return ans; priority_queue<int> Q; for(int i=0;i<原创 2021-09-03 11:53:57 · 106 阅读 · 0 评论 -
求链表中倒数第k个结点
方法1.顺序struct ListNode* getKthFromEnd(struct ListNode* head, int k){ struct ListNode* p=head; int cnt=0; while(p!=NULL) { cnt++; p=p->next; } //cnt-k; struct ListNode* t=head; int temp=0; while(t!=NULL原创 2021-09-02 10:48:30 · 62 阅读 · 0 评论 -
leetcode 165 比较版本号*
一开始想的是逐个字符比较,发现考虑的情况非常多然后想到把’.'号间的数转换成整型比较int cal(char* version,int index,int* p){ int i=index; int len=strlen(version); //printf("i=%d\n",i); while(version[index+1]!='.'&&((index+1)<len)) { index++; }原创 2021-09-01 11:41:49 · 49 阅读 · 0 评论 -
leetcode 1109 线段树
/** * Note: The returned array must be malloced, assume caller calls free(). */ #define ll long long typedef struct node { int left; int right; ll sum; ll lazy_tag; }node; void build_tree(node* tree,int index,int left,int right)原创 2021-08-31 13:45:41 · 282 阅读 · 0 评论 -
leetcode 528 按权重生成随机数
class Solution {private: mt19937 gen; uniform_int_distribution<int> dis; vector<int> pre;public: Solution(vector<int>& w): gen(random_device{}()), dis(1, accumulate(w.begin(), w.end(), 0)) { partial_sum(w.be转载 2021-08-30 14:40:52 · 199 阅读 · 0 评论 -
leetcode 1588 奇数长度的子数组的和*
int sumOddLengthSubarrays(int* arr, int arrSize){ int sum=0; for(int i=0;i<arrSize;i++) { int tempsum=arr[i]; sum+=tempsum; for(int j=2;j+i<arrSize;j+=2) { tempsum+=arr[j+i]; tempsum原创 2021-08-29 11:26:34 · 60 阅读 · 0 评论 -
leetcode 1480 一维数组的动态和
int* runningSum(int* nums, int numsSize, int* returnSize){ for(int i=1;i<numsSize;i++) { nums[i]=nums[i-1]+nums[i]; } *returnSize=numsSize; return nums;}原创 2021-08-28 11:21:22 · 82 阅读 · 0 评论 -
leetcode 295 设计一个数据结构寻找数据的中位数
官方题解转载 2021-08-27 10:36:35 · 147 阅读 · 0 评论 -
leetcode 881 救生艇
这题用贪心来做,关键是找到贪心的思维一开始做的时候贪心的思维不对,敲了好几份然后都错了看了题解才知道是要从最重的和最轻的入手int cmp(int*a,int*b){ return *a-*b;}int numRescueBoats(int* people, int peopleSize, int limit){ int ans=0; qsort(people,peopleSize,sizeof(int),cmp); int left=0; int ri原创 2021-08-26 11:59:23 · 73 阅读 · 0 评论 -
leetcode797所有可能的路径 DFS*
这题一看就知道要用DFS 思路很简单,但是由于DFS方面写的不多 导致代码实现的时候遇到了困难第一次的代码 void dfs(int index,int** returnArray,int* returnSize,int** returnColumnSizes, int** graph, int graphSize, int* graphColSize,bool* vis) { vis[index]=true; returnArray[*returnSi原创 2021-08-25 13:44:57 · 66 阅读 · 0 评论 -
leetcode 787 k次中转的单源最短路径*
动态规划#define MAXN 0x7ffffff#define MIN(x,y) (x<y?x:y)int findCheapestPrice(int n, int** flights, int flightsSize, int* flightsColSize, int src, int dst, int k){ int martrix[n][n]; int dis0[n];//存储src到各个点经过k-1次中转的距离 int dis1[n];//存储src到各个点经原创 2021-08-24 12:29:32 · 139 阅读 · 0 评论 -
leetcode 1646
#define MAX(x,y) (x>y?x:y)int getMaximumGenerated(int n){ if(n==0) return 0; if(n==1) return 1; int maxx=-1; int f[n+1]; f[0]=0;f[1]=1; for(int i=2;i<=n;i++) { f[i]=f[i/2]+(i&1)*f[i/2+1]; maxx=MA原创 2021-08-23 09:53:12 · 54 阅读 · 0 评论 -
leetcode789 逃脱阻碍者 曼哈顿距离*
只要有阻碍者能够比玩家先到达终点就可以了,所以只要计算距离就行了也有可能阻碍者和玩家是在去终点的途中碰到的,那么在这种情况下,他们到达终点的距离是一样的,也是符合上面的bool escapeGhosts(int** ghosts, int ghostsSize, int* ghostsColSize, int* target, int targetSize){ int t=abs(target[0]-0)+abs(target[1]-0); int temp; for(in原创 2021-08-22 09:41:51 · 75 阅读 · 0 评论 -
leetcode 443 压缩字符串
int compress(char* chars, int charsSize){ int i=0,j=0,t=0; int temp[4]; int k; char compare=chars[0]; while(j<=charsSize) { if(j<charsSize&&chars[j]==compare) { j++; t++;原创 2021-08-21 10:18:36 · 43 阅读 · 0 评论