目录

第1题:单词规律

第2题:找不同

第3题:在排序数组中查找元素的第一个和最后一个位置

第4题:使用最小花费爬楼梯

第5题:寻找峰值

第6题:字符串中的第一个唯一字符

第7题:两个数组的交集 II

第8题:分发饼干

第9题:旋转图像

第10题:矩阵置零


力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

第1题:单词规律

试题要求如下:

回答(C语言):

bool wordPattern(char * pattern, char * str){char **hash = (char **)malloc(26 * sizeof(char*));for (int i = 0; i < 26; ++i){hash[i] = (char*)malloc(64 * sizeof(char));memset(hash[i], 0, 64 * sizeof(char));}int len = strlen(pattern);for (int i = 0; i < len; ++i){char *p = str;while (p && *p != 0 && *p != ' ') ++p;if (' ' == *p) *p++ = 0;if (strlen(str) == 0)return false;int pos = pattern[i] - 'a';if (strlen(hash[pos]) == 0){for (int j = 0; j < 26; ++j){if (j != pos && strlen(hash[j]) > 0){if (strcmp(hash[j], str) == 0)return false;}}strcpy(hash[pos], str);}else{if (strcmp(hash[pos], str) != 0)return false;}str = p;        }if (strlen(str) > 0)return false;return true;
}

运行效率如下所示:


第2题:找不同

试题要求如下:

解题思路:

回答(C语言):

char findTheDifference(char* s, char* t) {int n = strlen(s), m = strlen(t);int as = 0, at = 0;for (int i = 0; i < n; i++) {as += s[i];}for (int i = 0; i < m; i++) {at += t[i];}return at - as;
}

运行效率如下所示:


第3题:在排序数组中查找元素的第一个和最后一个位置

试题要求如下:

回答(C语言):

int* searchRange(int* nums, int numsSize, int target, int* returnSize){int *ret=(int *)malloc(sizeof(int)*2);ret[0]=-1;ret[1]=-1;*returnSize=2;if(numsSize==0||target<nums[0]||target>nums[numsSize-1]){        return ret;}int left=0, right=numsSize-1, mid=0, head=0, tail=0;while(left<=right){mid=(left+right)/2;if(nums[mid]>=target){right=mid-1;}else{left=mid+1;         //mid存的就是第一个>=target的那个值的索引}}head=left;left=0, right=numsSize-1, mid=0;while(left<=right){mid=(left+right)/2;if(nums[mid]<=target){left=mid+1;}else{right=mid-1;}}tail=right;if(nums[head]==target){     //存在这个数ret[0]=head;ret[1]=tail;}return ret;
}

运行效率如下所示:


第4题:使用最小花费爬楼梯

试题要求如下:

回答(C语言):

int minCostClimbingStairs(int* cost, int costSize) {int prev = 0, curr = 0;for (int i = 2; i <= costSize; i++) {int next = fmin(curr + cost[i - 1], prev + cost[i - 2]);prev = curr;curr = next;}return curr;
}

运行效率如下所示:


第5题:寻找峰值

试题要求如下:

回答(C语言):

int findPeakElement(int *nums, int numsSize)
{if (!nums || numsSize < 1) {return 0;}if (numsSize == 1) {return 0;}if (nums[0] > nums[1]) {return 0;}if (nums[numsSize - 1] > nums[numsSize - 2]) {return numsSize - 1;}for (int i = 1; i < numsSize - 1; i++) {if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) {return i;}}return -1;
}

运行效率如下所示:


第6题:字符串中的第一个唯一字符

试题要求如下:

解题思路:

两次遍历,一次记录字符出现次数,一次找出第一个出现一次的索引。

回答(C语言):

int firstUniqChar(char * s){if(s == NULL || strlen(s) == 0) return -1;int len = strlen(s);if(len == 1) return 0;int recode[26] = {0};//记录字符出现次数for(int i=0;i<len;i++){recode[s[i]-'a']++;}//找出第一个出现一次的索引for(int i=0;i<len;i++){if(recode[s[i]-'a'] == 1){return i;}}return -1;
}

运行效率如下所示:


第7题:两个数组的交集 II

试题要求如下:

回答(C语言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
struct cell
{int value;int times1;int times2;
};
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){int i = 0, cur, mapSize = nums1Size + nums2Size, *ret = (int *)malloc(sizeof(int) * (nums1Size + nums2Size));*returnSize = 0;struct cell *hashMap = (struct cell *)memset(malloc(sizeof(struct cell) * mapSize), 0, sizeof(struct cell) * mapSize);for (i = 0; i < nums1Size; i++){cur = (nums1[i] > 0 ? 1 : -1) * (nums1[i] % mapSize);while((hashMap[cur].times1 || hashMap[cur].times2) && hashMap[cur].value != nums1[i]){cur++;cur = cur == mapSize ? 0 : cur;}if (hashMap[cur].times1 == 0 && hashMap[cur].times2 == 0)hashMap[cur].value = nums1[i];hashMap[cur].times1++;}for (i = 0; i < nums2Size; i++){cur = (nums2[i] > 0 ? 1 : -1) * (nums2[i] % mapSize);while((hashMap[cur].times1 || hashMap[cur].times2) && hashMap[cur].value != nums2[i]){cur++;cur = cur == mapSize ? 0 : cur;}if (hashMap[cur].times1 == 0 && hashMap[cur].times2 == 0)hashMap[cur].value = nums2[i];hashMap[cur].times2++;}for (i = 0; i < mapSize; i++)while ((hashMap[i].times2--) && (hashMap[i].times1--))ret[(*returnSize)++] = hashMap[i].value;return ret;
}

运行效率如下所示:


第8题:分发饼干

试题要求如下:

回答(C语言):

int compare(const void * a, const void * b)
{return ( *(int*)b - *(int*)a );
}int findContentChildren(int* g, int gSize, int* s, int sSize){int count=0;qsort (g, gSize, sizeof(int), compare);qsort (s, sSize, sizeof(int), compare);for(int i = 0, j = 0; i < gSize && j < sSize; i++, j++){if(s[j] >= g[i])count++;elsej--;}return count;
}

运行效率如下所示:


第9题:旋转图像

试题要求如下:

回答(C语言):

void rotate(int** matrix, int matrixSize, int* matrixColSize) {int matrix_new[matrixSize][matrixSize];for (int i = 0; i < matrixSize; i++) {for (int j = 0; j < matrixSize; j++) {matrix_new[i][j] = matrix[i][j];}}for (int i = 0; i < matrixSize; ++i) {for (int j = 0; j < matrixSize; ++j) {matrix[j][matrixSize - i - 1] = matrix_new[i][j];}}
}

运行效率如下所示:


第10题:矩阵置零

试题要求如下:

回答(C语言):

void setZeroes(int** matrix, int matrixSize, int* matrixColSize){int i = 0;int j = 0;int iRow = matrixSize;int iCol = matrixColSize[0];int row[iRow];int col[iCol];memset(row, 0x00, sizeof(int) * iRow);memset(col, 0x00, sizeof(int) * iCol);//1,遍历一遍,找出所有为0的元素,并在行,列数组中标记for (i = 0; i < iRow; i++){for (j = 0; j < iCol; j++){if (matrix[i][j] == 0){row[i] = 1;col[j] = 1;}}}//2,遍历数组,按照行,列中的结果修改矩阵for (i = 0; i < iRow; i++){for (j = 0; j < iCol; j++){if (row[i] == 1){matrix[i][j] = 0;}if (col[j] == 1){matrix[i][j] = 0;}}}
}

运行效率如下所示:

力扣(LeetCode)刷题,简单+中等题(第30期)相关推荐

  1. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  2. 力扣(LeetCode)刷题,简单+中等题(第26期)

    目录 第1题:字典序排数 第2题:字符串解码 第3题:查找常用字符 第4题:所有奇数长度子数组的和 第5题:长按键入 第6题:分割字符串的最大得分 第7题:回文链表 第8题:有多少小于当前数字的数字 ...

  3. 力扣(LeetCode)刷题,简单+中等题(第35期)

    力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...

  4. 力扣(LeetCode)刷题,简单+中等题(第34期)

    目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...

  5. 力扣(LeetCode)刷题,简单+中等题(第33期)

    目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...

  6. 力扣(LeetCode)刷题,简单+中等题(第32期)

    目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...

  7. 力扣(LeetCode)刷题,简单+中等题(第31期)

    目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...

  8. 力扣(LeetCode)刷题,简单+中等题(第29期)

    目录 第1题:分割数组为连续子序列 第2题:翻转矩阵后的得分 第3题:寻找旋转排序数组中的最小值 第4题:乘积最大子数组 第5题:不同路径 第6题:判断路径是否相交 第7题:摆动序列 第8题:单调递增 ...

  9. 力扣(LeetCode)刷题,简单+中等题(第28期)

    目录 第1题:翻转单词顺序 第2题:顺时针打印矩阵 第3题:总持续时间可被 60 整除的歌曲 第4题:字符串的最大公因子 第5题:上升下降字符串 第6题:将数组分成和相等的三个部分 第7题:可被 5 ...

最新文章

  1. FFT算法8点12位硬件实现 (verilog)
  2. 科学家发现量子大脑传感器可以跟踪脑电波,这可能对发现脑疾病至关重要
  3. freemarker了解
  4. C# App.config 自定义 配置节
  5. 回顾2019年5个重大宕机事件
  6. Qt 如何发送和接收UDP数据报
  7. 《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?
  8. 面试阿里挂了却拿到网易、点我达offer,一个三年经验Java程序员的面试总结
  9. maven 项目管理和构建工具
  10. vue 引入json地图_VUE中通过Echarts引入地图
  11. 系统中多种隐藏超级用户方法
  12. 蓝色起源成功完成“新谢泼德号”飞船第17次发射
  13. SSIS:错误信息总结
  14. WPF 动态添加控件以及样式字典的引用(Style introduction)
  15. 随机森林模型sklearn_sklearn之随机森林
  16. 苹果手机投屏软件_苹果手机怎样投屏到笔记本?
  17. mipi的dsi全称_mipi协议里面csi和dsi是什么意思
  18. 快递单号如何批量查询呢
  19. Go、Rust、C++和Zig语言的生产力对比 | Gopher Daily (2021.03.28) ʕ◔ϖ◔ʔ
  20. 汽车CAN通信基础知识-Java之Socket通信实战

热门文章

  1. 微信小程序 文字换行
  2. 蒟蒻吃药计划-治疗系列 #round 2 合并石子+乘积最大
  3. 2022-2028年中国液体燃料行业市场研究及前瞻分析报告
  4. Linux IO实时监控iostat命令详解
  5. 怎么给html页面添加网格线,html – 如何使用css制作网格(如图纸网格)?
  6. Maven 开 发 规 范
  7. Go 学习笔记(46)— Go 标准库之 fmt(输入/输出格式化参数、Printf/Fprintf/Sprintf区别、Println/Fprintln/Sprintln 区别)
  8. SOAPUI请求及mockservice 使用
  9. php 动态分页,PHP动态分页函数,PHP开发分页必备啦
  10. c语言le后能跟变量吗,【C语言】C语言常量和变量