目录

第1题:整数转换

第2题:重复的子字符串

第3题:范围求和2

第4题:反转数位

第5题:数字转换为十六进制

第6题:比较含退格的字符

第7题:三个数的最大乘积

第8题:珠玑妙算

第9题:旋转字符串

第10题:较大分组的位置


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

第1题:整数转换

试题要求如下:

解答思路:

异或操作。

回答(C语言):

int convertInteger(int A, int B){int res=0;unsigned int tmp = A^B;while(tmp){if(tmp&1==1){res=res+1;}tmp>>=1;}return res;
}

运行效率如下所示:


第2题:重复的子字符串

试题要求如下:

解答思路:

回答(C语言):

bool repeatedSubstringPattern(char* s) {int n = strlen(s);for (int i = 1; i * 2 <= n; ++i) {if (n % i == 0) {bool match = true;for (int j = i; j < n; ++j) {if (s[j] != s[j - i]) {match = false;break;}}if (match) {return true;}}}return false;
}

运行效率如下所示:


第3题:范围求和2

试题要求如下:

解答思路:

这题最简单的做法就是去找所给二维矩阵的第一列了和第二列最小的数,因为数组每行的两个数都可以划分一个矩形,最后和最大的数,必定是共同的重叠部分,所以只需找数组每列的最小值,乘积为所求。

回答(C语言):

int maxCount(int m, int n, int** ops, int opsSize, int* opsColSize){int min_c = m, min_r = n;for(int i = 0;i < opsSize;i++){if(ops[i][0] < min_c){min_c = ops[i][0];}if(ops[i][1] < min_r){min_r = ops[i][1];}}return min_c * min_r;
}

运行效率如下所示:


第4题:反转数位

试题要求如下:

回答(C语言):

void toBit(int num, int *val) {int i = 0;while(num) {val[i] = num & 1;num >>= 1;i++;}
}int reverseBits(int num){int val[32] = {0};toBit(num, val);int count = 0;int countPre = 0;int max = 0;for (int i = 0; i < 32; i++) {if (val[i] == 1) {count++;} else {if (countPre + count + 1 > max) {max = countPre + count + 1;}countPre = count;count = 0;}}return max;
}

运行效率如下所示:


第5题:数字转换为十六进制

试题要求如下:

解答思路:

取余、除以16(0X0F),装入数组,再反转。

回答(C语言):

char g_stack[16 + 1] = {0};
void swap(char *a, char *b) {char t = *a; *a = *b; *b = t; }char * toHex(int num) {int top = -1;unsigned int n = num;char index[] = "0123456789abcdef";// 这里用do...while()而不是while(),能直接覆盖num为0的情况do {g_stack[++top] = index[n % 16];n /= 16;} while (n != 0);g_stack[top + 1] = '\0';int lo = 0, hi = top;while (lo < hi) {swap(&g_stack[lo++], &g_stack[hi--]);}return g_stack;
}

运行效率如下所示:


第6题:比较含退格的字符

试题要求如下:

解答思路:

采用双指针,遇到‘#’,下标减一,删除前一个字符;其他字符依次增加下标计数;得到新的字符串,然后就是字符串是否相同对比。

回答(C语言):

int deletebackspace(char *str,int size){if(str==NULL||size==0){return 0;}int index = 0;for(int i=0;i<size;i++){if(str[i] != '#'){str[index++] = str[i];}else{if(index>0){index--;}}}return index;
}bool backspaceCompare(char * S, char * T){int slen = deletebackspace(S,strlen(S));int tlen = deletebackspace(T,strlen(T));if(slen != tlen){return false;}else{for(int i=0;i<slen;i++){if(S[i] != T[i]){return false;}}return true;}
}

运行效率如下所示:


第7题:三个数的最大乘积

试题要求如下:

解答思路:

我们将数组进行升序排序,如果数组中所有的元素都是非负数,那么答案即为最后三个元素的乘积。

如果数组中出现了负数,那么我们还需要考虑乘积中包含负数的情况,显然选择最小的两个负数和最大的一个正数是最优的,即为前两个元素与最后一个元素的乘积。

回答(C语言):

int Compare(const void* a, const void* b)
{return *(int*)a - *(int*)b;
}int Max(int a, int b)
{return a > b ? a : b;
}int maximumProduct(int* nums, int numsSize){qsort(nums, numsSize, sizeof(int), Compare);return Max(nums[numsSize - 1] * nums[numsSize -2] * nums[numsSize - 3], nums[numsSize - 1] * nums[0] * nums[1]);
}

运行效率如下所示:


第8题:珠玑妙算

试题要求如下:

回答(C语言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* masterMind(char* solution, char* guess, int* returnSize){returnSize[0] = 2;int dict[26] = {0}, *res = (int *)malloc (sizeof (int) * 2);res[0] = res[1] = 0;for (int i = 0; solution[i] != '\0'; ++i) {dict[solution[i] -'A']++;if (guess[i] == solution[i]) res[0]++;}for (int i = 0; solution[i] != '\0'; ++i) {if (dict[guess[i] - 'A']) {dict[guess[i] - 'A']--;res[1]++;}}res[1] -= res[0];return res;
}

运行效率如下所示:


第9题:旋转字符串

试题要求如下:

回答(C语言):

bool rotateString(char * A, char * B){int len = strlen(A);if(strlen(B) != len) return false;if(strcmp(A, B) == 0) return true;for(int i = 0; i < len; i++) {if(A[0] == B[i]) {int j;for(j=0; j < len; j++) {if(j<i && A[j+len-i] != B[j]) {break;}if(j >= i && A[j-i] != B[j]) {break;}}if(j == len) {return true;}}}return false;
}

运行效率如下所示:


第10题:较大分组的位置

试题要求如下:

回答(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** largeGroupPositions(char * S, int* returnSize, int** returnColumnSizes){int size = 0;int len =strlen(S);if(len < 3){*returnSize = 0;** returnColumnSizes = 0;return 0;}int ** res = (int **)malloc(len * sizeof(int *));for(int i=0;i<len;i++){res[i] = (int *)calloc(2,sizeof(int));}for(int i=0; i<len-2 ; i++){if( S[i] == S[i+1] && S[i] == S[i+2]){(*returnColumnSizes)[size] = 2;char temp = S[i];res[size][0]=i;i+=3;while(temp == S[i] && i<len) i++;res[size][1]=--i;                   //由于循环体内有i++,此处的S[i]已经是新值的起始点,为了一致,应退回1size++;   }}*returnSize = size;return res;
}

运行效率如下所示:

力扣(LeetCode)刷题,简单题(第23期)相关推荐

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

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

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

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

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

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

  4. 力扣(LeetCode)刷题,简单题(第15期)

    目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...

  5. 力扣(LeetCode)刷题,简单题(第5期)

    目录 第1题:二进制中1的个数 第2题:打印从 1 到最大的 n 位十进制数 第3题:删除链表的节点 第4题:调整数组顺序使奇数位于偶数前面 第5题:链表中倒数第K个节点 第6题:反转链表 第7题:二 ...

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

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

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

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

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

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

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

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

最新文章

  1. 设计模式之简单工厂模式
  2. java openssl库,Java的OpenSSL
  3. kafka系列三、Kafka三款监控工具比较
  4. WinForm数据源分页技术
  5. 8.2.1.3 Range Optimization
  6. 使用Spark构建简单的RESTful API
  7. 动态规划 —— 数位 DP
  8. Linux之chrony时间同步服务、ntp协议
  9. 大学课程很少有教怎么设计单片机开发板,进阶板更不用说
  10. popen函数的实现
  11. SPSS——非参数检验——1-Sample K-S 单个样本(Kolmogorov-Smirnov)柯尔莫哥洛夫-斯米诺夫检验
  12. 使用TestNG-abbot测试GUI
  13. Windows下GetLastError()返回值介绍
  14. 超级牛散股神叶健颜专找重组题材股,精准买入,不服不行。
  15. 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」----转载自stormzhang 原创文章
  16. 软件性能测试方案怎么编写?权威的性能测试报告如何申请?
  17. Far manager基本操作指南
  18. tsv文件与csv文件的区别以及如何转换
  19. 到底谁适合学Python呢?
  20. UE4 蓝图Structure与Json的读写

热门文章

  1. Python 赋值运算符
  2. idea(3)-jetty配置
  3. 四种Java线程池用法解析
  4. Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度
  5. Java基础语法(一)注释,关键字,常量,变量,数据类型,标识符,数据类型转换...
  6. vim+vundle配置
  7. python学习之列表
  8. layoutSubviews总结(转)
  9. struts2登录后返回登录前的页面
  10. Ubuntu下安装和配置Apache2