当前位置: 首页 > java >正文

C++ 哈希算法、贪心算法

哈希算法:辅助数组h[1001], h[x]代表x出现的次数,整数技术器c。

算法:遍历这n个数,对于遍历到的第i个数x,计算出以下数字 y = h[x - 1] + h[x + 1]直接累加到计数器c上(因为h[x]代表x的出现次数),把当前遍历到的x这个数,执行以下操作,h[x] = h[x] + 1,代表增加x的计数。(缺点:如果数字范围很大很散,就会导致开不出这么大的空间)。

为了解决上述提到的缺点,会采取取模等方式,也会出现哈希冲突等情况,也会有对应的哈希冲突解决方案。

代码分析:

1 初始化哈希表

function hashInit(){

   for i -> (0, HMAX-1)

        hash[i] = -1;

}

2 哈希插入

function hashInsert(x){

  y = x % HMAX;

  while(1)

       if(hash[y] == -1)

          hash[y] = x

          cnt[y] = 1

          return 

       else if(hash[y] == x)

          cnt[y]++

          return

       if(++y >= HMAX) 

        y = 0

}

哈希查找

function hashGet(x)

   y = x % HMAX

   while(1)

      if(hash[y] == -1)

        return 0

      else if(hash[y] == x)

       return cnt[y]

     if(++y >= HMAX)

       y = 0

 在C++中,unordered_map 是对应的哈希表

 代码练习,对应蓝桥云课 字符统计 代码见下

#include <iostream>
#include <string>using namespace std;
int main()
{string s;int hash[256] = {0};cin >> s;for(int i=0; i<s.size(); ++i){hash[s[i]]++;}int maxc = 0;char ret[256];int retSize = 0;for(char c = 'A'; c <= 'Z'; c++){if(hash[c] > maxc){maxc = hash[c];retSize = 0;ret[retSize++] = c;}else if(hash[c] == maxc){ret[retSize++] = c;}}ret[retSize] = '\0';cout << ret << endl;// 请在此输入您的代码return 0;
}

  代码练习 2 对应蓝桥云课 字符串统计,代码见下

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
{unordered_map<string, int> cnt;int n;cin >> n;for(int i=0; i<n; ++i){string s;cin >> s;cnt[s] = 1;}cout << cnt.size() << endl;// 请在此输入您的代码return 0;
}

代码练习三,对应蓝桥,优质数对,代码见下

#include <iostream>
#include <unordered_map>
using namespace std;#define SB 1000000001
#define ll long long
int n;
int A[100001];
int B[100001];int main()
{cin >> n;for(int i=0; i<n; ++i){cin >> A[i];}for(int i=0; i<n; ++i){cin >> B[i];}unordered_map<ll, int> h;long long ret = 0;for(int j=0; j<n; ++j){ll y = (ll)B[j]*SB + A[j];ret += h[y];ll x = (ll)A[j]*SB + B[j];h[x]++;}cout << ret << endl;// 请在此输入您的代码return 0;
}

贪心算法在每一步均采取当前状态下的最优(局部最优)策略,以期望获得全局最优解

代码练习 对应蓝桥云课 翻硬币,代码见下

#include <iostream>
#include <string>
using namespace std;string s, t;int main()
{cin >> s;cin >> t;int n = s.size();int ret = 0;for(int i=0; i<n; ++i){if(s[i] != t[i]){s[i] = (s[i] == 'o' ? '*' : 'o');s[i+1] = (s[i+1] == 'o' ? '*' : 'o');++ret;}}cout << ret << endl;// 请在此输入您的代码return 0;
}

代码练习,对应蓝桥云课 一键3连,代码见下

#include <iostream>
#include <algorithm>
using namespace std;int n;
int A[100001];int main()
{cin >> n;for(int i=0; i<n; ++i){cin >> A[i];}sort(A, A+n);int l=1, r=1;while(r < n){if(A[r] != A[l-1]){A[l++] = A[r];}r++;}int res = 0;for(int i=0; i+2<l; ++i){int a = A[i];if(A[i+1] == a+1 && A[i+2] == a+2){++res;}}cout << res << endl;// 请在此输入您的代码return 0;
}

代码练习,对应蓝桥云课 分开元音字母,代码见下

#include <iostream>
#include <string>
using namespace std;bool isYuanyin(char c){return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}string s;
string ret;int main()
{cin >> s;ret = "(";bool flag = false;int cnt = 0;for(int i=0; i<s.size(); ++i){if(isYuanyin(s[i])){cnt++;flag = true;if(cnt > 1){ret += ")";ret += "(";cnt = 1;}}ret += s[i];}ret += ")";if(flag == false){ret = s;}// 请在此输入您的代码cout << ret;return 0;
}

http://www.xdnf.cn/news/16570.html

相关文章:

  • Android15广播ANR的源码流程分析
  • Linux系统Centos7 安装mysql5.7教程 和mysql的简单指令
  • rhel9.1配置本地源并设置开机自动挂载(适用于物理光驱的场景)
  • 在 Windows 系统 下直接使用了 Linux/macOS 的环境变量设置语法 PLATFORM=android
  • 图像处理第三篇:初级篇(续)—— 照明的理论知识
  • 问题大全【1】
  • Ansible提权sudo后执行报错
  • STM32——寄存器映射
  • Day22-二叉树的迭代遍历
  • NAS远程访问新解法:OMV与cpolar的技术协同价值
  • 浏览器安全演进:从裸指针到 raw_ptr 的实践与思考
  • QGIS基于规则的道路分级制图及Leaflet集成展示实例
  • 日志分析-windows日志分析base--笔记ing
  • 数论1.01
  • 【实时Linux实战系列】在实时应用中进行负载均衡
  • Python day27
  • 【硬件】LVGL
  • 时序数据基座升维:Apache IoTDB 以“端边云AI一体化”重构工业智能决策
  • Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式能源接入与电网稳定性保障中的应用(368)
  • 基于黑马教程——微服务架构解析(二)
  • OpenI x SCNet “智能超算”创新应用挑战赛:实践阶段1和阶段2 部署Deepseek推理模型
  • 图片格式转换
  • AR技术赋能工业设备维护:效率与智能的飞跃
  • 【数据结构初阶】--二叉树(三)
  • 使用signal信号机制 + backtrace函数打印出程序崩溃后的堆栈信息
  • Flutter在购物场景中BLoC的应用
  • MySQL面试题及详细答案 155道(001-020)
  • 无人机气动设计模块解析
  • 微信小程序点击输入框时,顶部导航栏被遮挡问题如何解决?
  • 秩为1的矩阵的特征和性质