目录

第1题:Z 字形变换

第2题:删除字符串中的所有相邻重复项

第3题:基本计算器 II

第4题:螺旋矩阵

第5题:螺旋矩阵 II

第6题:盛最多水的容器

第7题:删除有序数组中的重复项 II

第8题:搜索旋转排序数组 II

第9题:平方数之和

第10题:最接近的三数之和


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

第1题:Z 字形变换

试题要求如下:

解题思路:

回答(C语言):

char * convert(char * s, int numRows){int n = strlen(s);if (numRows == 1) return s;char* res = (char*)malloc(sizeof(char) * (n + 1));int k = 0;for (int i = 0; i < numRows; i++) {for (int j = 0; j < n; j++) {if (j % (2 * numRows - 2) == i || j % (2 * numRows - 2) == 2 * numRows - 2 - i) {res[k++] = s[j];}}}res[k] = '\0';return res;
}

运行效率如下所示:


第2题:删除字符串中的所有相邻重复项

试题要求如下:

回答(C语言):

char* removeDuplicates(char* S) {int n = strlen(S);char* stk = malloc(sizeof(char) * (n + 1));int retSize = 0;for (int i = 0; i < n; i++) {if (retSize > 0 && stk[retSize - 1] == S[i]) {retSize--;} else {stk[retSize++] = S[i];}}stk[retSize] = '\0';return stk;
}

运行效率如下所示:


第3题:基本计算器 II

试题要求如下:

回答(C语言):

int calculate(char* s) {int n = strlen(s);int stk[n], top = 0;char preSign = '+';int num = 0;for (int i = 0; i < n; ++i) {if (isdigit(s[i])) {num = num * 10 + (int)(s[i] - '0');}if (!isdigit(s[i]) && s[i] != ' ' || i == n - 1) {switch (preSign) {case '+':stk[top++] = num;break;case '-':stk[top++] = -num;break;case '*':stk[top - 1] *= num;break;default:stk[top - 1] /= num;}preSign = s[i];num = 0;}}int ret = 0;for (int i = 0; i < top; i++) {ret += stk[i];}return ret;
}

运行效率如下所示:


第4题:螺旋矩阵

试题要求如下:

解题思路:

可以将矩阵看成若干层,首先输出最外层的元素,其次输出次外层的元素,直到输出最内层的元素。

回答(C语言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {if (matrixSize == 0 || matrixColSize[0] == 0) {*returnSize = 0;return NULL;}int rows = matrixSize, columns = matrixColSize[0];int total = rows * columns;int* order = malloc(sizeof(int) * total);*returnSize = 0;int left = 0, right = columns - 1, top = 0, bottom = rows - 1;while (left <= right && top <= bottom) {for (int column = left; column <= right; column++) {order[(*returnSize)++] = matrix[top][column];}for (int row = top + 1; row <= bottom; row++) {order[(*returnSize)++] = matrix[row][right];}if (left < right && top < bottom) {for (int column = right - 1; column > left; column--) {order[(*returnSize)++] = matrix[bottom][column];}for (int row = bottom; row > top; row--) {order[(*returnSize)++] = matrix[row][left];}}left++;right--;top++;bottom--;}return order;
}

运行效率如下所示:


第5题:螺旋矩阵 II

试题要求如下:

回答(C语言):

/*** 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 caller calls free().*/
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){int i;int up    = 0;int down  = n - 1;int left  = 0;int right = n - 1;int idx   = 1;int **res          = (int**)malloc(sizeof(int*) * n);*returnColumnSizes = (int*)malloc(sizeof(int) * n);*returnSize        = n;/* 输出n*n矩阵 */for (i = 0; i < n; i++) {res[i] = (int*)malloc(sizeof(int) * n);(*returnColumnSizes)[i] = n;}while (up <= down && left <= right) {for (i = left; i <= right; i++) { /* 上 */res[up][i] = idx++;}up++;for (i = up; i <= down; i++) {    /* 右 */res[i][right] = idx++;}right--;for (i = right; i >= left && up <= down; i--) { /* 下 */res[down][i] = idx++;}down--;for (i = down; i >= up && left <= down; i--) { /* 左 */res[i][left] = idx++;}left++;}return res;
}

运行效率如下所示:


第6题:盛最多水的容器

试题要求如下:

解题思路:

采用双指针思路:因为所求区间是类似于窗口的区间,在一直变化,只是取其中最大的一个;可以从两端往中间移动,一次移动中,最小的边与窗口区间组成的面积为本条边所组成的最大容积。

回答(C语言):

#define MAXSIZE 30000
int stack[MAXSIZE] = {0};int maxArea(int* height, int heightSize){int ret = 0;int left = 0;int right = heightSize - 1;int temp = 0;while (left < right) {if (height[left] < height[right]) {temp = height[left] * (right - left);left++;} else {temp = height[right] * (right - left);right--;}ret = ret > temp ? ret : temp;}return ret;
}

运行效率如下所示:


第7题:删除有序数组中的重复项 II

试题要求如下:

回答(C语言):

int removeDuplicates(int* nums, int numsSize) {if (numsSize <= 2) {return numsSize;}int slow = 2, fast = 2;while (fast < numsSize) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;
}

运行效率如下所示:


第8题:搜索旋转排序数组 II

试题要求如下:

解题思路:

回答(C语言):

bool search(int* nums, int numsSize, int target) {if (numsSize == 0) {return false;}if (numsSize == 1) {return nums[0] == target;}int l = 0, r = numsSize - 1;while (l <= r) {int mid = (l + r) / 2;if (nums[mid] == target) {return true;}if (nums[l] == nums[mid] && nums[mid] == nums[r]) {++l;--r;} else if (nums[l] <= nums[mid]) {if (nums[l] <= target && target < nums[mid]) {r = mid - 1;} else {l = mid + 1;}} else {if (nums[mid] < target && target <= nums[numsSize - 1]) {l = mid + 1;} else {r = mid - 1;}}}return false;
}

运行效率如下所示:


第9题:平方数之和

试题要求如下:

解题思路:

回答(C语言):

bool judgeSquareSum(int c) {long left = 0;long right = (int)sqrt(c);while (left <= right) {long sum = left * left + right * right;if (sum == c) {return true;} else if (sum > c) {right--;} else {left++;}}return false;
}

运行效率如下所示:


第10题:最接近的三数之和

试题要求如下:

解题思路:

1、先快速排序,再用双指针找三数之和

2、用一个变量gap记录 sum和target的距离(即差的绝对值), ret记录此时的返回值

3、若有sum = target,直接返回sum。否则所有循环结束后返回ret

回答(C语言):

int comp(const void* a, const void* b) {return *(int*)a - *(int*)b;
}int threeSumClosest(int* nums, int numsSize, int target) {int ret, gap = 0x7fffffff;   // gap 记录距离并初始化为最大值,ret 记录此时返回值qsort(nums, numsSize, sizeof(int), comp);for (int i = 0; i < numsSize - 2; i++) {int left = i + 1;int right = numsSize - 1;while (left < right) {int sum = nums[i] + nums[left] + nums[right];if (abs(sum - target) < gap) {    //如果距离更短,则更新 gap 和 retgap = abs(sum - target);ret = sum;}if (sum > target) right--;        //移动左右指针else if (sum < target) left++;else return sum;}}return ret;
}

运行效率如下所示:

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

  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)刷题,简单+中等题(第32期)

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

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

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

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

    目录 第1题:单词规律 第2题:找不同 第3题:在排序数组中查找元素的第一个和最后一个位置 第4题:使用最小花费爬楼梯 第5题:寻找峰值 第6题:字符串中的第一个唯一字符 第7题:两个数组的交集 II ...

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

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

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

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

最新文章

  1. 华为深度学习新模型DeepShift:移位和求反代替乘法,成本大降
  2. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
  3. Android 手写Binder 教你理解android中的进程间通信
  4. IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)
  5. [flutter专题]详解AppBar小部件
  6. SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字...
  7. netlink怎么读_内核交互 netlink,检测部分进程死亡和启动。
  8. es6 --- 数组的扩展
  9. 读取字符串中的数字和小数
  10. php 不能运行,PHP 环境不能正常运行
  11. Understanding ES6 -- 深入理解ES6书籍
  12. Python 进阶 —— itertools
  13. 关闭windows开机浏览器自动跳转MSN
  14. 命令提示符死亡之ping教程
  15. 计算机地图制图的点状符号制作,点状符号
  16. 百度中文手写输入法linux版,[Linux]百度输入法Linux版 V1.0.1.0 [2020.05.19]
  17. win10录屏_不为人知的win10隐藏功能,一键录屏,你还不知道?
  18. JS特效三:LightBox(轮播图+图片弹窗)
  19. python如何读取dbf文件_Python如何读取DBF文件
  20. 零基础学习CANoe Panel(13)—— 滑条(TrackBar )

热门文章

  1. Linux操作系统下文件作用
  2. git命令合并分支代码
  3. Android ListView item设置分割线以及分割线宽度
  4. 【剑指offer】14、剪绳子
  5. Go 学习笔记(25)— 并发(04)[有缓冲/无缓冲通道、WaitGroup 协程同步、select 多路监听通道、close 关闭通道、channel 传参或作为结构体成员]
  6. day13 paramiko、数据库表操作
  7. xamarin 断点 不命中
  8. mysql中sql语句
  9. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明
  10. 牛腩44 整合登陆页 RequiredFieldValidator 和 ValidationSummary 以及 asp.net 自带的MD5 加密...