- 博客(199)
- 问答 (4)
- 收藏
- 关注
转载 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 232
转载 P2181对角线条数
首先由于不会有三条对角线交于一点,所以过某一个交点有且只能有2条对角线而这两条对角线实质上是确定了4个顶点(也可以看做是一个四边形的两条对角线交于一点,求四边形的数量)。因此我们只需要确定4个顶点就得到了这个唯一确定的交点。因此我们只需要求这样4个顶点的搭配有多少个了也就是从n个顶点中取4个出来。https://www.luogu.com.cn/problem/solution/P2181...
2021-10-05 08:14:19 114
转载 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 98
原创 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 94
转载 leetcode 166 分数到小数 余数
numerator/denomerator为整数部分上步的余数部分乘以10/denomerator为第一位小数上步的余数部分乘以10/denomerator为第二位小数………………如何找到循环节呢?如果有一步的余数已经出现过了 就代表循环节已经出现...
2021-10-03 09:41:33 136
原创 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 100
原创 fgets和fscanf在读取srt文件时哪个比较快及fscanf的fp指针移动问题
while(fgets(str,1024,fp))while (fscanf(fp, "%[^\n]%*[\n]", str) != EOF)在数据量较小时为5000行数据时fgets为2个时钟单元单元fscanf为5个数据量为10万行时fgets为45个时钟单元fscanf为101个时钟单元数据量为100万行数据时fgets为408个时钟单元fscanf为955个时钟单元综上来说 fgets比较快,但是fgets缓冲区足够大的话,str后面还会更上个’\n’...
2021-10-01 09:43:41 349
原创 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 97
转载 leetcode 517 超级洗衣机 求最大流量
本题要求的是任选m台洗衣机本题要求最小的移动次数,肯定每次的移动都是为了多的往少的移动 可以是一次从多的往少的移动,也可以经过一个或多个中转站往少的移动。这样差值就有这样两种情况(2,-3,1,-4,6,-2) 因为允许并行,所以移动次数是由最多的那堆衣服决定,每次都是差值为正的那些洗衣机并行操作。还有种情况(4,2,-6) 因为选择的m个洗衣机可以包含连续的洗衣机,那中间部分的洗衣机只起到了过渡作用,如果这些起过渡作用的洗衣机也是需要往外面移出的话 就不能和最大差值的那个洗衣机并行操作了。这时候若
2021-09-30 17:50:11 264
转载 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 210
原创 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 105
原创 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 85
转载 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 80
原创 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 97
原创 leetcode430 扁平化多级双向链表
我的方法是用DFS 一开始想直接在head链表的基础上进行修改结果发现单纯的dfs不行,因为当遍历的有子节点的结点时可以改变这两个结点间的链接关系,但是当一个分支全部遍历完毕之后,还要回到上一级,就是上个有孩子结点的那个结点的后一个结点,所以就需要把这些需要结点都要保存下来,有2个结点就要保存2个,有100个结点就要保存100个但从传递参数的角度来看,是不现实的。理论上可以传递一个栈的指针,用栈来保存这些结点,但一个分支结束时,弹出栈顶指针就可以实际上采用的方法是dfs遍历每个结点然后加入到新的链表中。
2021-09-24 19:22:11 89
转载 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 80
原创 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 66
原创 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 105
原创 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 62
原创 初次接触Web Apache Tomcat 与两者的整合及虚拟主机的设置中遇到的问题记录
配置Apache配置Apache的过程主要是通过修改httpd.conf文件来配置的,修改后需要先安装Apache服务可以通过控制台调到Apache的bin目录 通过httpd -t来检查语法错误配置TOMCAT运行startup.bat后表明tomcat启动了,不能关闭这个界面 否则localhost:8080无法访问Apache与Tomcat的整合使用http_proxy集成后,即在Apache的httpd.conf文件的末尾添加了ProxyPass和ProxyPassReverse两条代
2021-09-19 16:30:15 93
原创 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 59
原创 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 70
原创 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 138
转载 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 66
原创 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 102
转载 VS2019配置ODBC连接sql server数据库
C语言连接SQL Server数据库并且完成一次简易操纵#include <windows.h>#include <sql.h>#include <sqlext.h>#include <sqltypes.h>#include <odbcss.h>#include <stdio.h>SQLHENV henv;//环境句柄SQLHDBC hdbc;//连接句柄SQLHSTMT hstmt;//语句句柄SQLRETURN
2021-09-11 14:46:45 2424 1
转载 HDU 1237 求一个连通图中的哈密顿回路数(同一个状态下的哈密顿回路数)
哈密顿回路的具体形状不同,但是同一个状态下,不同的哈密顿回路的个数是相同的n个结点,各个结点间都是想通的,所以有(n-1)*n/2条边。每走一次都需要(也只需)n条边才能经过n个顶点,所以答案是(n-1)/2,即((n-1)*n/2)/n=(n-1)/2。#include <iostream>using namespace std;int main(){ int n; while(cin >> n && n) cout
2021-09-09 15:38:13 358
原创 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 89
原创 HDU 2899 二分
#include <iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<vector>#define ENTER printf("\n");#define MOD 1000000007//快速打印一个数组#define ll long long#define NUM 1000#define d
2021-09-08 19:55:46 50
原创 HDU 3283 求比一个排列大的第一个排列
以279134399742为例第一步找到末尾的上升序列99742 它的前一个数3就是要变换的数第二部在上升序列99742中找到第一个比3大的数 也就是4 然后交换3和4交换3和4后变为279134499732将99732逆序得279134423799#include <iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#
2021-09-08 19:45:10 53
原创 HDU 2266 在一串数字中添加“+““-“使得等式成立 dfs
#include <iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<vector>#define ENTER printf("\n");#define MOD 1000000007//快速打印一个数组#define ll long long#define NUM 1000using nam
2021-09-08 19:06:46 88
转载 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 59
原创 HDU 4472 Count 求n个结点有多少个平衡的树 dp
这里平衡的定义是 同一高度的结点具有相同个数的子节点,还要注意有些图是同构的以n=6进行思考当最高结点的子结点只有一个时,那要使5个结点构成平衡的,种数就是f(5)当最高结点的子节点有两个时,要使4个结点构成的两颗子树,及整棵大的树是平衡的,必然这两颗子树要是一样的,这两颗子树的结点数也要相同所以就是f(6-1/2),即f(2.5)而2.5又不是整数,所以此种情况下不能构成平衡的同理最高结点的子节点有3个时,每颗子树的结点个数就是(6-1)/3=5/3 也不行同理一直分析到子节点的个数有5个就可以
2021-09-07 20:12:53 74
原创 HDU 2566 统计硬币 暴力枚举
注意a+b<=n这个条件#include <iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<vector>#define ENTER printf("\n");//快速打印一个数组#define ll long long#define NUM 1000#define MOD 1000
2021-09-07 19:17:55 81
转载 HDU 4642 博弈
题意:Alice和Bob中玩游戏,给你一个n*m的矩阵,由0和1组成,每次选择一个1,将当前位置(x,y)与(n,m)组成的矩阵都纤维相反的0->1,1->0Alice先开始,谁先组成0矩阵就胜利无论谁翻转,都会改变最后一个位置的值,所以只考虑最后一个点,有0和1两种情况,其中必然有一个必胜点,当是1时,Alice将其变为0,所以为1为必胜点只要判断最后一个位置就可以了。。。#include"stdio.h"#include"string.h" int main(){ int
2021-09-07 18:31:00 57
原创 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 106
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人