目录

第1题:分割数组为连续子序列

第2题:翻转矩阵后的得分

第3题:寻找旋转排序数组中的最小值

第4题:乘积最大子数组

第5题:不同路径

第6题:判断路径是否相交

第7题:摆动序列

第8题:单调递增的数字

第9题:移除链表元素

第10题:计数二进制子串


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

第1题:分割数组为连续子序列

试题要求如下:

回答(C语言):

#define SIZE 10001bool isPossible(int* nums, int numsSize){int one[SIZE] = {0};int two[SIZE] = {0};int safe[SIZE] = {0};int oneSize = 0;int twoSize = 0;int now;int minValue = nums[0] - 1;for (int i = 0; i < numsSize; ++i) {now = nums[i] - 1 - minValue;if (one[now] == 0 && two[now] == 0 && safe[now] == 0) {++one[now + 1];++oneSize;} else if (one[now] > 0) {++two[now + 1];--one[now];--oneSize;++twoSize;} else if (two[now] > 0) {++safe[now + 1];--two[now];--twoSize;} else{++safe[now + 1];--safe[now];}}return twoSize == 0 && oneSize == 0;
}

运行效率如下所示:


第2题:翻转矩阵后的得分

试题要求如下:

解题思路:

为了得到最高的分数,矩阵的每一行的最左边的数都必须为 1。为了做到这一点,可以翻转那些最左边的数不为 1 的那些行,而其他的行则保持不动。

当将每一行的最左边的数都变为 1 之后,就只能进行列翻转了。为了使得总得分最大,我们要让每个列中 1 的数目尽可能多。

因此,扫描除了最左边的列以外的每一列,如果该列 0 的数目多于 1 的数目,就翻转该列,其他的列则保持不变。

回答(C语言):

int matrixScore(int** A, int ASize, int* AColSize) {int m = ASize, n = AColSize[0];int ret = m * (1 << (n - 1));for (int j = 1; j < n; j++) {int nOnes = 0;for (int i = 0; i < m; i++) {if (A[i][0] == 1) {nOnes += A[i][j];} else {nOnes += (1 - A[i][j]);  // 如果这一行进行了行反转,则该元素的实际取值为 1 - A[i][j]}}int k = fmax(nOnes, m - nOnes);ret += k * (1 << (n - j - 1));}return ret;
}

运行效率如下所示:


第3题:寻找旋转排序数组中的最小值

试题要求如下:

回答(C语言):

int findMin(int* nums, int numsSize){int left = 0,right = numsSize-1,mid;while(left < right){mid = left + (right - left)/2;if(nums[mid]>nums[right]){left = mid + 1;}else{right = mid;}}return nums[left];
}

运行效率如下所示:


第4题:乘积最大子数组

试题要求如下:

回答(C语言):

#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:Bint maxProduct(int* nums, int numsSize){int imax = 1, imin = 1, res = nums[0];int tmp,i;for(i = 0; i < numsSize; i++){if(nums[i] < 0){tmp = imax;imax = imin;imin = tmp;}imax = MAX(imax * nums[i], nums[i]);imin = MIN(imin * nums[i], nums[i]);res = MAX(imax, res); }return res;
}

运行效率如下所示:


第5题:不同路径

试题要求如下:

回答(C语言):

int uniquePaths(int m, int n) {int f[m][n];for (int i = 0; i < m; ++i) {f[i][0] = 1;}for (int j = 0; j < n; ++j) {f[0][j] = 1;}for (int i = 1; i < m; ++i) {for (int j = 1; j < n; ++j) {f[i][j] = f[i - 1][j] + f[i][j - 1];}}return f[m - 1][n - 1];
}

运行效率如下所示:


第6题:判断路径是否相交

试题要求如下:

回答(C语言):

#define MAX 1001bool isPathCrossing(char * path){if(path==NULL)  return false;int hash[MAX][MAX]={0};int x=500,y=500;hash[x][y]=1;//zero point is 1for(int i=0; i<strlen(path); i++){if(path[i]=='N'){if(hash[x][y+1]==1) return true;else hash[x][++y]=1;}if(path[i]=='S'){if(hash[x][y-1]==1) return true;else hash[x][--y]=1;}if(path[i]=='W'){if(hash[x-1][y]==1) return true;else hash[--x][y]=1;}if(path[i]=='E'){if(hash[x+1][y]==1) return true;else hash[++x][y]=1;}}return false;
}

运行效率如下所示:


第7题:摆动序列

试题要求如下:

回答(C语言):

int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int up = 1, down = 1;for (int i = 1; i < numsSize; i++) {if (nums[i] > nums[i - 1]) {up = fmax(up, down + 1);} else if (nums[i] < nums[i - 1]) {down = fmax(up + 1, down);}}return fmax(up, down);
}

运行效率如下所示:


第8题:单调递增的数字

试题要求如下:

回答(C语言):

int monotoneIncreasingDigits(int N){bool isInc = true;int mod = N % 10;int curr = N / 10;int multi = 10;int lastNum = curr;int lastMulti = multi;while(curr > 0) {if (mod < curr % 10) {isInc = false;lastNum = curr;lastMulti = multi;curr -= 1; // 不单调递减时去前面借一位}mod = curr % 10;curr /= 10;multi *= 10;}if (isInc == false) {return lastNum * lastMulti - 1;}return N;
}

运行效率如下所示:


第9题:移除链表元素

试题要求如下:

回答(C语言):

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val){ if (head == NULL) {return NULL;}     /* 删除 head 节点后面值为 val 的元素的节点 */struct ListNode* res = removeElements(head->next, val);/* head 节点是要删除的节点 */if (head->val == val) {return res;} else {head->next = res;return head;}
}

运行效率如下所示:


第10题:计数二进制子串

试题要求如下:

回答(C语言):

int countBinarySubstrings(char* s) {int ptr = 0, n = strlen(s), last = 0, ans = 0;while (ptr < n) {char c = s[ptr];int count = 0;while (ptr < n && s[ptr] == c) {++ptr;++count;}ans += fmin(count, last);last = count;}return ans;
}

运行效率如下所示

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

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

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

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

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

最新文章

  1. 算法导论 pdf_学习数据结构和算法最好的书是什么?
  2. Anaconda安装(ubuntu 14.04.03 LTS 64bit)
  3. Excel--Solver安装和使用
  4. php字符集转换,php字符集转换
  5. iPhone XR再降价:64GB到手最低仅需4149元
  6. Spring4Shell 漏洞已遭Mirai 僵尸网络利用
  7. 关于日志记录的一些感想
  8. Multiple CPUs,Multiple Cores、Hyper-Threading
  9. 注册表添加 右键功能
  10. 小甲鱼 c语言 17课
  11. 【Oracle】IF EXISTS用法
  12. 益聚星荣:海底捞要关300家店,火锅还有救吗?
  13. 利用R语言ggplot2包制作金字塔图,展示人口结构数据
  14. 为什么你一直是打工仔
  15. Android P init进程reboot流程和调试方法
  16. 利用球谐系数计算函数值及利用EGM球谐系数计算重力异常
  17. 使用自定义的评价函数优化高NA分束器
  18. 如画的水乡,如画的同里1012
  19. 这一天,我拿到了华为“天道酬勤”奖,这是我到海外的第十年
  20. WIN32 进程间通讯-共享内存

热门文章

  1. 【laravel7.x中文文档】Redis
  2. ‘utf-8‘ codec can‘t decode byte 0xa8 in position 1210: invalid start byte报错解决
  3. 微信小程序地图上图片放到下面
  4. GlideApp 引入不了问题
  5. 线段树——HDU - 1698
  6. linux挂在win共享文件
  7. 转 前端工程师凭什么这么值钱?
  8. VisualStudio 合并代码文件
  9. node、Mongo项目如何前后端分离提供接口给前端
  10. Go 学习笔记(36)— 基于Go方法的面向对象(封装、继承、多态)