![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lc小法
记录刷题生活
南风不知意182
这个作者很懒,什么都没留下…
展开
-
kmp解leetcode28
int strStr(char* haystack, char* needle) { if(strlen(needle)==0) { return 0; } int next[strlen(needle)]; getnext(needle,next);//获取next数组 int j=0; for(int i=0;i<strlen(haystack);i++) { while(j>0&&am.原创 2022-02-06 17:11:00 · 224 阅读 · 0 评论 -
leetcode第14题
//最长公共前缀就是等于纵向对比,遇到不一致,就说明已经是最长的前缀了。char * longestCommonPrefix(char ** strs, int strsSize){//用第一个字符串与下面几个字符串纵向对比if(strsSize==0)return "";for(int i=0;i<strlen(strs[0]);++i){//第一个字符串的长度 for(int j=0;j<strsSize;++j){//这个二维数组中字符串的数量 if...原创 2022-02-05 17:57:58 · 373 阅读 · 0 评论 -
leetcode1984题
解题思路先排序,在有序数组中,就可以很容易的判断k个学生中最小差值,这是我们需要一个MIN#define MIN(a,b) ((a)<(b)?(a):(b))int cmp(const void*a,const void* b){ return *(int*)a-*(int*)b;}int minimumDifference(int* nums, int numsSize, int k){ //先排除一个数 if(numsSize==1) retur...原创 2022-02-11 10:42:16 · 6353 阅读 · 0 评论 -
leetcode209题
int minSubArrayLen(int target, int* nums, int numsSize){ //滑动窗口 int slow=0,fast=0,sum=0; int result=INT_MAX; int sublength=0;//窗口长度 for(fast;fast<numsSize;++fast) { sum+=nums[fast]; while(sum>=target) .原创 2022-02-11 12:04:45 · 448 阅读 · 0 评论 -
leetcode第20题
用栈实现,可以参考用栈实现逆波兰表示法bool isValid(char * s){//首先如果字符串的长度不是偶数,说明又有一个是没有左括号或右括号 int len; len=strlen(s); char stack[len+1]; int top=0,i,flag=1; if(len%2!=0||s[0]==')'||s[0]=='}'||s[0]==']'){//如果字符串第一个是右括号,就不可能右与之匹配的左括号 return false;}...原创 2022-02-05 17:55:25 · 236 阅读 · 0 评论 -
leetcode第9题
leetcode第9题,字符数组以及倒置的小小..原创 2022-02-05 16:17:25 · 313 阅读 · 0 评论 -
leetcode59题,参考了题解
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){ //初始化返回值 *returnSize=n; *returnColumnSizes=(int*)malloc(sizeof(int)*n); //初始化返回数组 int**ans=(int**)malloc(sizeof(int*)*n); int i; for(i=0;i<n;i++) { .原创 2022-02-11 13:05:42 · 608 阅读 · 0 评论 -
leetcode27题
int removeElement(int* nums, int numsSize, int val){ //快慢指针 int slow=0,fast=0; for(fast;fast<numsSize;++fast) { if(val!=nums[fast]) { nums[slow++]=nums[fast]; } } return sl.原创 2022-02-11 11:24:39 · 321 阅读 · 0 评论 -
leetcode977
解题思路两种做法:1.平方后排序2.双指针(左边指针平方与右边指针平方相比较,创建一个数组,从numssize-1开始,大的往里面存,然后--)int* sortedSquares(int* nums, int numsSize, int* returnSize){ // *returnSize=numsSize;//因为这个只是平方后排序,大小不变 int right=numsSize-1; int left =0; int*ans=(int*)mall...原创 2022-02-10 21:15:15 · 377 阅读 · 0 评论 -
贪心解决leetcode53题
int maxSubArray(int* nums, int numsSize){ //看了题解的贪心,应该就是之前数组和小于0,sum重置为0 //贪在sum如果是负数一定会拉低最大和,所以为负数时,重置为0 int sum=0; int result=INT_MIN; for(int i=0;i<numsSize;++i) { sum+=nums[i];//统计之前的和,小于0重置为0 result=max(resu.原创 2022-02-08 10:48:55 · 399 阅读 · 0 评论 -
位运算leetcode371两整数之和
int getSum(int a, int b){ int c; while(b) { c=(unsigned int)(a&b)<<1;//为1的表示进位,因为按位与运算符(同真为真同假为假,不同为假) //按位与运算后,这个数是没有进位的,所以左移1位 a=a^b;//进行不仅为的加法运算(同真为假,同假为假,不同为真) b=c;//更新 .原创 2022-02-08 10:25:15 · 171 阅读 · 0 评论 -
leetcode1791
int findCenter(int** edges, int edgesSize, int* edgesColSize){ int num1=edges[0][1]; int num2=edges[0][0]; //只需比较前两组,比较公共元素即可 if(num1==edges[1][1]||num1==edges[1][0]) return num1; return num2;}原创 2022-02-18 09:40:24 · 224 阅读 · 0 评论 -
leetcode 203移除链表元素
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeElements(struct ListNode* head, int val){ //着右两种情况,第一种删除的目标元素在头节点,第二种情况不在头节点 //在头节点 while(head!=NUL.原创 2022-02-28 15:01:50 · 187 阅读 · 0 评论 -
leetcode 206反转链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head){ struct ListNode*temp;//保存cur下一个位置 struct ListNode*cur=head; struct Li.原创 2022-03-02 13:28:13 · 93 阅读 · 0 评论 -
leetcode 367
bool isPerfectSquare(int num){ int left=0,right=num; while(left<=right) { int mid=left+(right-left)/2; long square=(long)mid*mid; if(square<num) { left=mid+1; } else if(square&g.原创 2022-02-25 12:51:55 · 128 阅读 · 0 评论 -
leetcode1382模拟
int *luckyNumbers (int **matrix, int matrixSize, int *matrixColSize, int *returnSize){ int *ret = (int *)malloc(sizeof(int) * matrixSize * matrixColSize[0]); int retSize = 0; for (int i = 0; i < matrixSize; i++) { for (int j = 0; j .原创 2022-02-15 11:29:16 · 375 阅读 · 0 评论 -
leetcode 904
#define MAX(x,y) ((x)>(y)?(x):(y))int totalFruit(int* fruits, int fruitsSize){ //先找到第1种和第二种水果 int sub1=0,sub2=0,temp,j=0,resuit=INT_MIN; for(int i=0;i<fruitsSize;i++) { sub1=fruits[i];//第一种 for(int k=i+1;k<fruitsS.原创 2022-02-26 14:02:28 · 115 阅读 · 0 评论 -
leetcode917
char * reverseOnlyLetters(char * s){ //双指针,用库函数isalpha int left=0; int right=strlen(s); if(right==0) return NULL; while(left<right) { //如果在两边搜索,都是字母就交换 if(isalpha(s[left])&&isalpha(s[right])) .原创 2022-02-23 10:10:47 · 419 阅读 · 0 评论 -
leetcode1020
之前在《啊哈!算法》中看到过这类题。不过这道题的飞地是不能在边界的,既然知道了不能在边界,那我们不就可以先有个思路,先处理边界,在遍历边界内飞地的数量了嘛。我参考了题解还是想了很久,就看着题解发呆,然后又看了题目要求的那两幅图才发现,我是真的菜鸡,太缺乏思考了,没有题解我都不知道能不能写出来,害!void dfs(int**grid,int row,int col,int x,int y){ //判断是否越界或访问过 if(x<0||x>=row||y<0||y&原创 2022-02-12 10:55:46 · 367 阅读 · 0 评论 -
leetode2016
#define MAX(x,y) ((x)>(y)?(x):(y))int maximumDifference(int* nums, int numsSize){ //遍历 int prim=nums[0],ans=-1;//用ans记录最大插值,prim相当于i for(int i=1;i<numsSize;++i)//因为0<=i<j<n,nums[i]<nums[j],这里的i其实时j { if(nums[i]&g.原创 2022-02-26 09:49:19 · 50 阅读 · 0 评论 -
leetcode258题
//普通做法int addDigits(int num){ //把整数每个为取出来 int sum=0; while(num>=10) { while(num)//执行完这里,已经把数字拆分号加起来了 { sum+=num%10; num/=10; } //如果加起来的数还是大于10 //那么更新num继续上面的操作,知道个位数为止 .原创 2022-02-19 22:24:00 · 44 阅读 · 0 评论 -
leetcode剑指offer29题
//这个玩意和第59题很像的,做这个只需要模拟即可,洞开开辟一个数组来存储,从左到右遍历,再将元素赋值,就ok了(建议去看leetcode的官方题解,我菜)int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){ if (matrixSize == 0 || matrixColSize[0] == 0) { *returnSize = 0; retur原创 2022-02-28 14:31:17 · 118 阅读 · 0 评论 -
leetcode1189
#define MIN(a,b) ((a)<(b)?a:b)int maxNumberOfBalloons(char * text){ int ret=INT_MAX; int n=strlen(text); int a[5]; memset(a,0,sizeof(int)*5); for(int i=0;i<n;i++)//统计出现的次数 { if(text[i]=='b'){ a[0]++; .原创 2022-02-13 10:30:43 · 137 阅读 · 0 评论 -
leetcode 283
void swap(int*a,int*b){ int temp=*a; *a=*b; *b=temp;}void moveZeroes(int* nums, int numsSize){ //双指针 if(numsSize==NULL) return; int fast=0,slow=0; //思路是:前后对比,如果有零就与非零交换,这样也可以保持相对顺序 while(fast<numsSize) { .原创 2022-02-25 14:07:41 · 281 阅读 · 0 评论 -
leetcode 844
char*BOOLs(char*str)//实现栈{ int length=strlen(str),len=0; char*ret=malloc(sizeof(char)*(length)+1); for(int i=0;i<length;++i) { if(str[i]!='#') { ret[len++]=str[i]; } else if(str[i]=='#'&&.原创 2022-02-26 10:42:52 · 75 阅读 · 0 评论 -
leetcode540
超时的快慢指针,可是超时了。。呜呜呜int singleNonDuplicate(int* nums, int numsSize){ //快慢指针,如果前一位与当前一位相等,那把fast赋值给slow,进行前移 int slow=0,fast=1; int ans=0; int len=numsSize; if(len==1) { return nums[0]; } while(slow<len) {原创 2022-02-14 11:00:38 · 473 阅读 · 0 评论 -
leetcode 26
int removeDuplicates(int* nums, int numsSize){ //快慢指针寻找非重复项,找到++slow即可,slow即使返回的长度 if(numsSize==0) return 0; int fast=1,slow=1; while(fast<numsSize) { if(nums[fast]!=nums[fast-1]) { nums[slow]=nums[fa.原创 2022-02-25 13:20:44 · 292 阅读 · 0 评论 -
leetcode69
int mySqrt(int x){ int left=0,right=x,ans=-1; while(left<=right) { int mid=left+(right-left)/2; if((long long)mid*mid<=x) { ans=mid; left=mid+1;//小于就调整左边界,小于往右进 } else .原创 2022-02-24 12:00:09 · 134 阅读 · 0 评论 -
leetcode34
//直接遍历,因为是升序数组,那么终点位置一定就在起始位置附近int* searchRange(int* nums, int numsSize, int target, int* returnSize){ int i,j; int *ans=(int*)malloc(sizeof(int)*2);//返回数组 int y1=-1,y2=-1; int flag=1; for(i=0;i<numsSize;i++) { if.原创 2022-02-24 11:40:47 · 512 阅读 · 0 评论 -
leetcode 707设计链表
typedef struct myListNode{ int elem; //数据域 struct myListNode* next; //指针域}myListNode;typedef struct MyLinkedListTag{ int val; int count; struct myListNode* head;} MyLinkedList;MyLinkedList* myLinke.原创 2022-03-02 12:55:44 · 181 阅读 · 0 评论 -
leetcode 19
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ //参考代码随想录 //双指针+虚拟头节点 struct ListNode*dummyHead=(struct L.原创 2022-03-03 12:49:04 · 197 阅读 · 0 评论 -
leetcode804 唯一的摩斯密码词
const static string mosi[]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};//思路:这里使用unordered_set是为了排除相同,我们将翻译好的摩斯密码放入set,不同单词翻译数量就是set的大小.原创 2022-04-10 17:24:00 · 290 阅读 · 0 评论 -
leetcode 202 快乐数
class Solution {public: int ishappysum(int n) { //将n分解,用sum记录 int sum=0; while(n) { sum+=(n%10)*(n%10); n/=10; } return sum; } bool isHappy(int n) { //因为会重复所有.原创 2022-04-01 12:59:14 · 47 阅读 · 0 评论 -
leetcode 2038
class Solution {public: bool winnerOfGame(string colors) { //连续三个才可以删除,那我们遍历一遍 int sum=0; int len=colors.size()-1; for(int i=1;i<len;++i) { //要看谁赢我们子需要知道他们互减后是真还是假 if(colors[i-1]=='A'.原创 2022-03-22 13:21:25 · 61 阅读 · 0 评论 -
leetcode 151 颠倒字符串中的单词
我这里分为3个步骤:去除多余空格 翻转字符串 使用指针截出每一个单词的长度,在翻转回来 class Solution {public: void reverse(string&s,int start,int end) { for(int i=start,j=end;i<j;++i,--j) swap(s[i],s[j]); } //去除空格,用双指针 void removespace(string&s)原创 2022-04-11 14:58:54 · 112 阅读 · 0 评论 -
leetcode 键指offer 05 替换空格
class Solution {public: string replaceSpace(string s) { //首先我们需要知道s串中有多少空格,扩充数组 int count=0; int oldsize=s.size(); //遍历字符串,计算空格 for(int i=0;i<s.size();++i) { if(s[i]==' ') cou.原创 2022-04-11 14:13:12 · 89 阅读 · 0 评论 -
leetcode454
class Solution {public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { unordered_map<int,int>unmap;//key计算和,value统计和的次数 for(auto a:A) { .原创 2022-04-06 13:39:49 · 97 阅读 · 0 评论 -
leetcode 242
int cmp(const void*a,const void*b){ char a1=*(char*)a,b1=*(char*)b; return a1-b1;}bool isAnagram(char * s, char * t){ //因为是异位词,所以排好序应该是一致的 //如果长度不一,说明这两个字符串不是异位词 int lens=strlen(s),lent=strlen(t); if(lens!=lent) { re.原创 2022-03-05 14:14:14 · 38 阅读 · 0 评论 -
leetcode806 写字符串需要的行数
const int MAXWITH=100;class Solution {public: vector<int> numberOfLines(vector<int>& widths, string s) { //直接遍历 int line=1;//从第一行开始 int width=0;//记录需要的宽度,widths是a到z需要的单位 for(auto&c:s) { .原创 2022-04-12 13:36:58 · 191 阅读 · 0 评论 -
leetcode 344 反转字符串1and2
class Solution {public: void reverseString(vector<char>& s) { for(int i=0,j=s.size()-1;i<s.size()/2;++i,--j) { swap(s[i],s[j]); } }};class Solution {public: string reverseStr(string s, int.原创 2022-04-09 14:56:13 · 268 阅读 · 0 评论