前言
如果你想学好算法和数据结构,请跟随他的脚步:
英雄哪里出来.

大家一起学习,一起打卡,一起成长。

目录

  • 模板
  • 题目列表
    • 1748.唯一元素的和
    • 387.字符串中的第一个唯一字符
    • 1941. 检查是否所有字符出现次数相同
    • 448. 找到所有数组中消失的数字
    • 1512. 好数对的数目
    • 1711. 大餐计数

模板

如果题目是有关次数的问题,例如查找出只出现多少次的数字或字符,就可以用这个方法。

#define CAPACITY 100 //题目给出的最大范围
void FindValue(int* nums, int numsSize)
{if (NULL == nums) //1return;int map[CAPACITY] = { 0 }; //2//3for (int i = 0; i < numsSize; ++i){map[nums[i]]++;}//4 解决方案(题目要求)}
  1. 判空
  2. 申请一个用来计数的数组,范围太大可以动态申请
  3. 遍历一遍,主要是统计次数

接下来的几个题目,基本都是按照这个方式来做的

题目列表

1748.唯一元素的和

链接: 唯一元素的和

#define CAPACITY 101
int sumOfUnique(int* nums, int numsSize)
{if (NULL == nums) //1判空return 0;//2.根据题意给出的范围,申请一个计数的数组//并初始化为0int count[CAPACITY] = {0};int ans = 0;//3.计数for (int i = 0; i < numsSize; ++i){count[nums[i]]++;}//4.据题目要求写方案for (int i = 0; i < CAPACITY; ++i){if (count[i] == 1){ans += i;}}return ans;
}

387.字符串中的第一个唯一字符

链接: 字符串中的第一个唯一字符

#define CAPACITY 27
int firstUniqChar(char * s)
{//和上面的解题步骤一样if (NULL == s) //1return -1;int nums[CAPACITY] = {0}; //2int len = strlen(s);for (int i = 0; i < len; ++i) //3{nums[s[i] - 'a']++;}for (int i = 0; i < len; ++i) //4{if (nums[s[i] - 'a'] == 1){return i;}}return -1;
}

1941. 检查是否所有字符出现次数相同

链接: 1941. 检查是否所有字符出现次数相同.

#define CAPACITY 26
bool areOccurrencesEqual(char * s)
{if (NULL == s)return false;int map[CAPACITY] = {0};int count = 0;for (int i = 0; i < strlen(s); ++i){map[s[i] - 'a']++;}for (int i = 0; i < CAPACITY; ++i){if (map[i] != 0 && map[i] != map[s[0] - 'a']){return false;}}return true;
}

448. 找到所有数组中消失的数字

链接: 448. 找到所有数组中消失的数字.

这个题比较特殊,第一是范围较大,可以采用动态申请空间,第二是要返回一个数组,申请动态数组,并根据题目要求返回这个数组的大小

int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
{*returnSize = 0;if (NULL == nums)return NULL;//申请动态空间int* map = (int*)malloc(sizeof(int) * (numsSize + 1));memset(map, 0, sizeof(int) * (numsSize + 1));//申请要返回的空间int* ans = (int*)malloc(sizeof(int) * (numsSize + 1));for (int i = 0; i < numsSize; ++i){map[nums[i]]++;}for (int i = 1; i < numsSize + 1; ++i){if (map[i] == 0){ans[(*returnSize)++] = i;}}free(map);return ans;
}

1512. 好数对的数目

链接: 1512. 好数对的数目

暴力法
双重循环,根据题目要求来记数

int numIdenticalPairs(int* nums, int numsSize)
{if (nums == NULL)return -1;int count = 0;for (int i = 0; i < numsSize - 1; ++i){for (int j = i + 1; j < numsSize; ++j){if (nums[i] == nums[j]){count++;}}}return count;
}

哈希表

#define CAPACITY 101
int numIdenticalPairs(int* nums, int numsSize)
{int map[CAPACITY] = {0};int ans = 0;for(int i = 0; i < numsSize; i++){map[nums[i]]++;ans += map[nums[i]] - 1;}return ans;
}

1711. 大餐计数

链接: 1711. 大餐计数

大餐 是指 恰好包含两道不同餐品 的一餐,其美味程度之和等于 2 的幂。

题目示例:

输入:deliciousness = [1,3,5,7,9]
输出:4
解释:大餐的美味程度组合为 (1,3) 、(1,7) 、(3,5) 和 (7,9) 。
它们各自的美味程度之和分别为 4 、8 、8 和 16 ,都是 2 的幂。

范围:

题目说出,两道不同餐品组合是2的幂,那反过来想,对每个元素,枚举出它和另一个数的所有和sum,即所有2的幂。那另一个数就是等于
other = sum - num


int map[(1<<21) + 1]; //根据题目要求写范围
int countPairs(int* deliciousness, int deliciousnessSize)
{if (NULL == deliciousness)return 0;memset (map, 0, sizeof(map)); int sum = 0; //用来保存2的幂int ans = 0; //返回的答案for(int i = 0; i < deliciousnessSize; ++i){         for(sum = 1; sum <= (1<<21); sum *= 2){     int other = sum - deliciousness[i];          if (other < 0){                        continue;}ans += map[other];                ans %= 1000000007;}map[deliciousness[i]]++;              }return ans;
}

方法来源
个人感觉这个方法比官方答案更好理解

链接: 英雄哪里出来《算法零基础100讲》.

Day05: 计数法(C语言)相关推荐

  1. PTA 1024 科学计数法 (c语言)

    1024 科学计数法 (20 分) 代码如下 #include<string.h> int main(void) {char head,a[10001]= {0};int ex=0;sca ...

  2. PAT乙级-1024 科学计数法- C语言实现(31行AC)

    考察知识点归纳: 根据题目要求输出 坑点归纳: 1.若小数部分长度等于指数值时不用在末尾加'.' 2.虽然题目说指数可能为0,实际给出指数都不为0 #include<stdio.h> in ...

  3. R语言禁止数值表示为科学计数法实战(Turn Off Scientific Notation ):全局设置或者单变量设置

    R语言禁止数值表示为科学计数法实战(Turn Off Scientific Notation ):全局设置或者单变量设置 目录

  4. R语言ggplot2可视化包抑制数据轴使用科学计数法实战

    R语言ggplot2可视化包抑制数据轴使用科学计数法实战 目录 R语言ggplot2可视化包抑制数据轴使用科学计数法实战

  5. c语言科学计数法_C入门:C语言中数据的储存(上)

    How Data is stored in computer memory? 储存数据是计算机进行各种数据操作的基础,为了理解计算机可以对哪些数据进行怎样的操作,有必要了解数据在计算机中的储存方式. ...

  6. PTA(Basic Level) 1024:科学计数法 (C语言实现)

    PTA(Basic Level) 1024:科学计数法 (C语言实现) 学习:正则表达式输入%[0-9],输入字符0-9,输入其他字符,则从此字符处被截断,如输入12345a123,则接受字符串为12 ...

  7. PAT乙级 C语言 1024 科学计数法

    注意点:俺没有注意到个位数是1位--且可以用"%[^E]E%d"输入,要不可以省一堆压根没用的东西--但我懒得改了 我觉得这个写的很好PAT乙级1024. 科学计数法(C语言)_对 ...

  8. C语言实例:输出八进制,十进制,十六进制,指定位数整数,带符号整数,科学计数法表示的整数

    C语言实例:输出整数的几种方式 1. 直接输出整数 直接使用printf函数输出整数即可,例如: #include <stdio.h>int main() {int num = 123;p ...

  9. R语言科学计数法详解:digits和scipen设置

    控制R语言科学计算法显示有两个option: digitis和scipen.介绍的资料很少,而且有些是错误的.经过翻看R语言的帮助和做例子仔细琢磨,总结如下: 默认的设置是: getOption(&q ...

最新文章

  1. pip: failed to create process.解决方法
  2. 飞桨领航团邀你出战!黑客松线下48H Coding Party等你来
  3. react 合并数组_React 常被忽视的细节。
  4. 免费录屏、直播推流软件之OBS Studio
  5. 日志文件夹不存在或被删除
  6. 转:visio 2013 激活软件 -- 记录
  7. C++——输入、输出和文件
  8. 如何快速将WPS表格或者excel数据将表格转化为json
  9. void* 指针有什么用
  10. 连续状态方程离散化与凸包表示形式
  11. 如何推进中小学STEM教育课程开发和实施
  12. 【C 语言】结构体 ( 结构体深拷贝 )
  13. 在Excel中怎样快速对数据进行求和?分享4种求和方法
  14. python编程猜拳游戏_python写猜拳小游戏
  15. 从《C++ Primer 第四版》入手学习 C++
  16. 手把手教你用pytorch实现k折交叉验证,解决类别不平衡
  17. java基于springboot智能停车场车位管理系统附源码风格
  18. 计算机页面格式和编排,计算机基础教案word排版(三)页面格式设置.doc
  19. 监听程序异常ios_最新的移动应用程序侵犯隐私行为ios剪贴板监听
  20. 工业物联网·翻推机设备联网及本地组网解决方案

热门文章

  1. 一个从业(非正品)奢侈品十年从业者的经验和历程。
  2. 2018秦皇岛ccpc赛后总结
  3. 相册里的WEB3 Festivals香港记忆
  4. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)
  5. 用python的tkinter做游戏(八)—— 实现图片在tkinter中自适应大小(自动匹配窗口)
  6. 应用程序“Parallels Desktop“无法打开MAC电脑打不开
  7. 微信账户如何解除对第三方应用的授权
  8. -I (大写i)、-L、-l(小写L) 的使用
  9. aruco字典如DICT_4X4_50含义
  10. WIN7笔记本 用户账户登录密码忘记/错误解决方法