第1题:配对交换
第2题:比较字符串最小字母出现频次
第3题:交替位二进制
第4题:二进制间距
第5题:最后一块石头的重量
第6题:旋转数字
第7题:十进制整数的反码
第8题:连续子数组的最大和
第9题:有序数组中出现次数超过25%的元素
第10题:数组中字符串匹配
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
第1题:配对交换试题要求如下:
解答思路:
分别取出num的偶数位与奇数位
然后让偶数位右移一位奇数位左移一位
让移位后的偶数与奇数异或即可得最终结果
回答(C语言):
int exchangeBits(int num){
int even_number = 0xaaaaaaaa; //1010 1010 ...... 取出偶数
int uneven_number = 0x55555555; //0101 0101 ...... 取出奇数
even_number = num & even_number;
uneven_number = num & uneven_number;
even_number = even_number >> 1;
uneven_number = uneven_number 0) {
res = hash[i];
break;
}
}
//printf("res %d\n", res);
return res;
}
int* numSmallerByFrequency(char ** queries, int queriesSize, char ** words, int wordsSize, int* returnSize){
int *array_q = (int *)malloc(queriesSize * sizeof(int));
int *array_w = (int *)malloc(wordsSize * sizeof(int));
int *hash = (int *)malloc(NUM * sizeof(0));
// queries各个字符串(按字典序比较)最小字母的出现频次
for (int i = 0; i < queriesSize; i++) {
array_q[i] = QureySmallWord(queries[i], hash);
}
// words各个字符串(按字典序比较)最小字母的出现频次
for (int i = 0; i < wordsSize; i++) {
array_w[i] = QureySmallWord(words[i], hash);
}
// 依次查找queries中字符串满足f(queries[i]) >= 1;
while (n != 0) {
if ((n & 1) == pre) {
return false;
}
pre = n & 1;
n >>= 1;
}
return true;
}
运行效率如下所示:
试题要求如下:
解答思路:
1、利用 1 与数字N进行&运算检查二进制第一位是否为1;
2、逐步将数字二进制值向右移动一位:N = N>>1;
3、N 0){ if((N & 1) != 0){ distanceon = 1; if(distance > max){ max = distance; } distance = 0; } distance+=(distanceon); N = N >> 1; } return max; }
运行效率如下所示:
试题要求如下:
解答思路:
1、5个石头撞四次 6个石头撞5次 N个石头撞N-1次;
2、降序,撞前两个。得到的新石头放回去,空缺位置置0;
3、重复第二步;
4、最后剩下一个,就是答案。
回答(C语言):
int Cmp(const void* a, const void* b)
{
return *(int*)b - *(int*)a;
}
int lastStoneWeight(int* stones, int stonesSize)
{
int time = stonesSize - 1;
int buf[30] = {0};
memcpy(buf, stones, stonesSize * sizeof(int));
while (time > 0) {
qsort(buf, 30, sizeof(int), Cmp);
buf[0] -= buf[1];
buf[1] = 0;
time--;
}
return buf[0];
}
运行效率如下所示:
试题要求如下:
解答思路:
遍历从 1 到 N 的每个数字 X,判断 X 是否为好数。如果 X 中存在 3、4、7 这样的无效数字,则 X 不是一个好数。如果 X 中不存在 2、5、6、9 这样的旋转后会变成不同的数字,则 X 不是一个好数。否则,X 可以旋转成一个不同的有效数字。
回答(C语言):
/*
* 函数功能:检测是否是好数;是好数返回1,否则返回0
* 函数输入:当前检测的数num
* 函数返回值:0或1
*/
int CheckDigits(int num)
{
int rest;
int flag = 0;
while(num > 0) {
rest = num % 10;
/* 遇到垃圾数直接返回0 */
if (rest == 3 || rest == 4 || rest == 7) {
return 0;
}
/* 遇到有可能存在的好数先标记一下 */
if (rest == 2 || rest == 5 || rest == 6 || rest == 9) {
flag = 1;
}
num = num / 10;
}
/* 如果不存在垃圾数,且有好数则统计加1 */
if (flag == 1) {
return 1;
}
return 0;
}
int rotatedDigits(int N){
int ret = 0;
for (int i = 1; i = arrSize){
break;
}
}
else{
cou = 0;
}
temp = arr[i];
i++;
}
return temp;
}
运行效率如下所示:
试题要求如下:
解答思路:
C语言使用strstr库函数来进行子字符串匹配。strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。
回答(C语言):
char ** stringMatching(char ** words, int wordsSize, int* returnSize){
if ((words == NULL) || (wordsSize
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【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脚手架写一个简单的页面?