目录

第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 << 1;return even_number | uneven_number;
}

运行效率如下所示:


第2题:比较字符串最小字母出现频次

试题要求如下:

解答思路:

回答(C语言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
#define NUM 26
int QureySmallWord (char *str, int *hash)
{memset(hash, 0, NUM * sizeof(int));int len = strlen(str);int res = 0;for (int i = 0; i < len; i++) {// 统计字符串中各个字符出现的频次,已默认是字典序hash[str[i] - 'a']++;}for (int i = 0; i < NUM; i++) {// 获取字符串中最小字母的出现频次,即hash表中第一个非零值if (hash[i] > 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]) < f(W[0..j])的个数int *res = (int *)malloc(queriesSize * sizeof(int));int count = 0;for (int i = 0; i < queriesSize; i++) {int temp = 0;for (int j = 0; j < wordsSize; j++) {//printf("array_q[%d] %d  array_w[%d] %d", i, array_q[i], j, array_w[j]);if (array_q[i] < array_w[j]) {temp++;}}res[count++] = temp;}*returnSize = count;return res;
}

运行效率如下所示:


第3题:交替位二进制

试题要求如下:

解答思路:

每次用 n&1 位运算取出最后一位,并与上一次取出的最后一位比较,一样的话返回false。

回答(C语言):

bool hasAlternatingBits(int n){int pre = n & 1; n >>= 1;while (n != 0) {if ((n & 1) == pre) {return false;}pre = n & 1;n >>= 1;}return true;
}

运行效率如下所示:


第4题:二进制间距

试题要求如下:

解答思路:

1、利用 1 与数字N进行&运算检查二进制第一位是否为1;

2、逐步将数字二进制值向右移动一位:N = N>>1;

3、N <= 0 时终止。

回答(C语言):

int binaryGap(int N){int distance = 0, max = 0,distanceon = 0; while (N > 0){if((N & 1) != 0){distanceon = 1;if(distance > max){max = distance;}distance = 0;}distance+=(distanceon);N = N >> 1;}return max;
}

运行效率如下所示:


第5题:最后一块石头的重量

试题要求如下:

解答思路:

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];
}

运行效率如下所示:


第6题:旋转数字

试题要求如下:

解答思路:

遍历从 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 <= N; i++) {/* 逐个检测,好数就加1 */ret += CheckDigits(i);}return ret;
}

运行效率如下所示:


第7题:十进制整数的反码

试题要求如下:

解答思路:

举个例子 6是110 那么他的反码是他与111异或得到的001。所以找到比N大的每位都为1的数,与N进行异或。

回答(C语言):

int bitwiseComplement(int N){int num = 1;while(num < N){num = (num << 1) + 1;}return N ^ num;
}

运行效率如下所示:


第8题:连续子数组的最大和

试题要求如下:

解答思路:

动态规划:

回答(C语言):

int maxSubArray(int* nums, int numsSize){int sum=nums[0],max=nums[0];for(int i=1;i<numsSize;i++){sum=(sum>0)?(sum+nums[i]):nums[i];max=(max>sum)?max:sum;   }return max;
}

运行效率如下所示:


第9题:有序数组中出现次数超过25%的元素

试题要求如下:

回答(C语言):

int findSpecialInteger(int* arr, int arrSize){int i = 1,cou = 0;int temp = arr[0];while(i < arrSize){if(temp == arr[i]){cou++;if(cou*4 >= arrSize){break;}} else{cou = 0;}temp = arr[i];i++;}return temp;
}

运行效率如下所示:


第10题:数组中字符串匹配

试题要求如下:

解答思路:

C语言使用strstr库函数来进行子字符串匹配。strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。

回答(C语言):

char ** stringMatching(char ** words, int wordsSize, int* returnSize){if ((words == NULL) || (wordsSize <= 0)) {*returnSize = 0;return NULL;}char** res = (char**)malloc(sizeof(char*) * wordsSize);int index = 0;for (int i = 0; i < wordsSize; i++) {for (int j = 0; j < wordsSize; j++) {if (i != j) {if (strstr(words[j], words[i])) {res[index] = (char*)malloc(sizeof(char) * (strlen(words[i]) + 1));memcpy(res[index], words[i], strlen(words[i]) + 1);index++;break;}}}}*returnSize = index;return res;}

运行效率如下所示:

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

  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)刷题,简单题(第23期)

    目录 第1题:整数转换 第2题:重复的子字符串 第3题:范围求和2 第4题:反转数位 第5题:数字转换为十六进制 第6题:比较含退格的字符 第7题:三个数的最大乘积 第8题:珠玑妙算 第9题:旋转字符 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. sql server 表索引碎片处理
  2. antd 文本域超长问题_一款能快速批量处理SQL文本的软件:NimbleText
  3. LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
  4. bootstrap css选择不同的宽度
  5. idea 集成svn
  6. python灰色预测模型步骤人口预测_人口预测模型灰色预测
  7. 利用ArcGIS的计算几何批量计算线要素长度
  8. 网易裁员,让保安把身患绝症的我赶出公司。我在网易亲身经历的噩梦!
  9. 液晶显示屏简介以及与CRT显示屏的对比
  10. 台式计算机如何升级,电脑硬件如何升级:PC硬件升级不盲目 对症下药最靠谱
  11. 生成器和生成器表达方式
  12. 区块链学习——区块链的架构
  13. 模型量化论文阅读#4----EWGS:Network Quantization with Element-wise Gradient Scaling
  14. 云服务器oa系统,oa系统放到云服务器云服务器
  15. GA(遗传算法) 解决TSP问题 Python实现
  16. 主振型 matlab 振动,基于MATLAB语言的多自由度振动系统的固有频率及主振型计算分析...
  17. quadro 2000专业显卡 win7计算机体验指数5.9,英伟达全新Quadro K2200专业级显卡评测...
  18. Godaddy子域名转向外部IP地址设置
  19. 触宝占据内容赛道有利位置:疯读高速发展,或将迎来价值修复时刻
  20. 壹角硬币是错版币,也是残币,有收藏价值吗?

热门文章

  1. ubuntu 系统下安装 xlwt
  2. Kotlin implements 的实现
  3. Android studio 文件包名连在一起的处理方法
  4. ViewPager单页显示3个item
  5. A. 位运算符的应用---管理一组事务的开关状态
  6. 机器学习基石4-在何时才能使用机器学习(4)
  7. 201621123068 作业08-集合
  8. MBTiles离线包生成和使用
  9. DBUtils 笔记
  10. win7下的IP-主机名映射