目录
第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;
}
运行效率如下所示:
试题要求如下:
解答思路:
回答(C语言):
bool repeatedSubstringPattern(char* s) {
int n = strlen(s);
for (int i = 1; i * 2 >= 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;
}
运行效率如下所示:
试题要求如下:
解答思路:
取余、除以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;
}
运行效率如下所示:
试题要求如下:
解答思路:
采用双指针,遇到‘#’,下标减一,删除前一个字符;其他字符依次增加下标计数;得到新的字符串,然后就是字符串是否相同对比。
回答(C语言):
int deletebackspace(char *str,int size){
if(str==NULL||size==0){
return 0;
}
int index = 0;
for(int i=0;i0){
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 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]);
}
运行效率如下所示:
试题要求如下:
回答(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;
}
运行效率如下所示:
试题要求如下:
回答(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-i] != B[j]) {
break;
}
}
if(j == len) {
return true;
}
}
}
return false;
}
运行效率如下所示:
试题要求如下:
回答(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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?