力扣(LeetCode)刷题,简单题(第23期)
目录
第1题:整数转换
第2题:重复的子字符串
第3题:范围求和2
第4题:反转数位
第5题:数字转换为十六进制
第6题:比较含退格的字符
第7题:三个数的最大乘积
第8题:珠玑妙算
第9题:旋转字符串
第10题:较大分组的位置
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
第1题:整数转换
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题:重复的子字符串
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
这题最简单的做法就是去找所给二维矩阵的第一列了和第二列最小的数,因为数组每行的两个数都可以划分一个矩形,最后和最大的数,必定是共同的重叠部分,所以只需找数组每列的最小值,乘积为所求。
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题:反转数位
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题:数字转换为十六进制
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题:比较含退格的字符
采用双指针,遇到‘#’,下标减一,删除前一个字符;其他字符依次增加下标计数;得到新的字符串,然后就是字符串是否相同对比。
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题:三个数的最大乘积
我们将数组进行升序排序,如果数组中所有的元素都是非负数,那么答案即为最后三个元素的乘积。
如果数组中出现了负数,那么我们还需要考虑乘积中包含负数的情况,显然选择最小的两个负数和最大的一个正数是最优的,即为前两个元素与最后一个元素的乘积。
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题:珠玑妙算
/*** 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题:旋转字符串
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题:较大分组的位置
/*** 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期)相关推荐
- Leetcode-How-What 力扣Leetcode刷题指南
Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...
- 力扣(LeetCode)刷题,简单+中等题(第35期)
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升. 第1题:解码异或后的排列 试题要求如下: 回答(C语言): /*** Note: ...
- 力扣(LeetCode)刷题,简单+中等题(第26期)
目录 第1题:字典序排数 第2题:字符串解码 第3题:查找常用字符 第4题:所有奇数长度子数组的和 第5题:长按键入 第6题:分割字符串的最大得分 第7题:回文链表 第8题:有多少小于当前数字的数字 ...
- 力扣(LeetCode)刷题,简单题(第15期)
目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...
- 力扣(LeetCode)刷题,简单题(第5期)
目录 第1题:二进制中1的个数 第2题:打印从 1 到最大的 n 位十进制数 第3题:删除链表的节点 第4题:调整数组顺序使奇数位于偶数前面 第5题:链表中倒数第K个节点 第6题:反转链表 第7题:二 ...
- 力扣(LeetCode)刷题,简单+中等题(第34期)
目录 第1题:整数转罗马数字 第2题:电话号码的字母组合 第3题:二叉树的所有路径 第4题:砖墙 第5题:下一个排列 第6题:括号生成 第7题:删除并获得点数 第8题:全排列 第9题:颜色分类 第10 ...
- 力扣(LeetCode)刷题,简单+中等题(第33期)
目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...
- 力扣(LeetCode)刷题,简单+中等题(第32期)
目录 第1题:数组的度 第2题:托普利茨矩阵 第3题:爱生气的书店老板 第4题:翻转图像 第5题:有效的数独 第6题:无重复字符的最长子串 第7题:区域和检索 - 数组不可变 第8题:二维区域和检索 ...
- 力扣(LeetCode)刷题,简单+中等题(第31期)
目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...
最新文章
- 设计模式之简单工厂模式
- java openssl库,Java的OpenSSL
- kafka系列三、Kafka三款监控工具比较
- WinForm数据源分页技术
- 8.2.1.3 Range Optimization
- 使用Spark构建简单的RESTful API
- 动态规划 —— 数位 DP
- Linux之chrony时间同步服务、ntp协议
- 大学课程很少有教怎么设计单片机开发板,进阶板更不用说
- popen函数的实现
- SPSS——非参数检验——1-Sample K-S 单个样本(Kolmogorov-Smirnov)柯尔莫哥洛夫-斯米诺夫检验
- 使用TestNG-abbot测试GUI
- Windows下GetLastError()返回值介绍
- 超级牛散股神叶健颜专找重组题材股,精准买入,不服不行。
- 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」----转载自stormzhang 原创文章
- 软件性能测试方案怎么编写?权威的性能测试报告如何申请?
- Far manager基本操作指南
- tsv文件与csv文件的区别以及如何转换
- 到底谁适合学Python呢?
- UE4 蓝图Structure与Json的读写