log算法

简介: log算法

文章目录

二分查找

1.查找大于等于x的最小值

#include<iostream>
using namespace std;
const int MAXN = 1e6 + 7;
int num[MAXN];
int n;
int binary(int x)
{
  int ans = -1;//-1说明ans不存在
  int left = 0, right = n - 1;
  int mid;
  while (left <= right)
  {
    mid = (left + right) / 2;
    if (num[mid] >= x)
    {
      ans = num[mid];
      right = mid - 1;
    }
    else
      left = mid + 1;
  }
  return ans;
}
int main()
{
  int x;
  cin >> n >> x;
  for (int i = 0; i < n; i++)
  {
    scanf("%d", &num[i]);
  }
    cout << binary(x) << endl;
  return 0;
}

查找重复数组中x的最小下标

int binaryindex(int x)
{
  int ans = -1;
  int left = 0, right = n - 1;
  int mid;
  while (left <= right)
  {
    mid = (left + right) / 2;
    if (num[mid] >= x)
    {
      ans =mid;
      right = mid - 1;
    }
    else
      left = mid + 1;
  }
  return ans;
}
int main()
{
  int x;
  cin >> n >> x;
  for (int i = 0; i < n; i++)
  {
    scanf("%d", &num[i]);
  }
  if (num[binaryindex(x)] == x)//判断找到的下标对应的值是否是x
  {
    cout << binaryindex(x) << endl;
  }
  return 0;
}

二分答案

这些值 1 2 3 4 5 6 7

对应 1 1 1 1 0 0 0 要找到符合条件的最大值

进击的奶牛

link.

题目描述

Farmer John 建造了一个有 N(2<=N<=1000000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x1x_1x1 ,…,xNx_NxN(0<xi<1000000000),他的c(2<c<n)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John 想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?


输入格式


第 1 行:两个用空格隔开的数字 N 和 C。


第 2 ~ N+1 行:每行一个整数,表示每个隔间的坐标


输出格式

输出只有一行,即相邻两头牛最大的最近距离。


输入

5 3

1

2

8

4

9

输出

3


计算最大的最近距离

1.再dis下可以放几头牛(首先先排序)

2.判断是否等于c

3.用二分法找到最小值

#include<iostream>
using namespace std;
int N, C;
const int MAXN = 1e7 + 6;
int arr[MAXN];
int comp(const void* e1, const void* e2)
{
  return *(int*)e1 - *(int*)e2;
}
int coutcow(int dis)
{
  int now = arr[0];
  int i = 1;
  int cnt = 1;
  for (i = 1; i < N; i++)
  {
    if (arr[i] - now >= dis)
    {
      cnt++;
      now = arr[i];
    }
  }
  return cnt;
}
bool beyondC(int dis)
{
  return coutcow(dis) >= C;
}
int binary()
{
  int left = 1, right = 1e9;
  int ans = -1;
  int mid;
  while (left <= right)
  {
    mid = (left + right) / 2;
    if (beyondC(mid))
    {
      ans = mid;
      left = mid + 1;
    }
    else
      right = mid - 1;
  }
  return ans;
}
int main()
{
  cin >> N >> C;
  int i = 0;
  for (i = 0; i < N; i++)
  {
    scanf("%d", &arr[i]);
  }
  qsort(arr, N, sizeof(int), comp);
  cout << binary() << endl;
  return 0;
}

皮皮的糖果

皮皮有n包不同口味的糖果,分给每个人糖果的 数量必须相等,并且每个人只能有一种口味,也就是说,可以把一包糖分给多个人,但是一个人的糖不能有多少口味,每个人最多能分到几颗糖

#include<iostream>
using namespace std;
const int MAXN = 1e6 + 7;
int arr[MAXN];
int n, m;
int count(int b)
{
  int sum = 0;
  int i = 0;
  for (i = 0; i < n; i++)
  {
    sum += arr[i] / b;//sum计算在分b个糖果的情况下可有多少个人
  }
  return sum;
}
bool check(int b,int m)
{
  return count(b) >= m;
}
int binary(int& n, int& m)
{
  int left = 1, right = 1e6;
  int mid;
  int ans = 1;
  while (left <= right)
  {
    mid = (left + right) / 2;
    if (check(mid,m))
    {
      ans = mid;
      left = mid + 1;
    }
    else
    {
      right = mid - 1;
    }
  }
  return ans;
}
int main()
{
  //n种口味,m个人
  int t;
  cin >> t ;
  while (t--)
  {
    cin >> n >> m;
    int i = 0;
    for (i = 0; i < n; i++)
    {
      scanf("%d", &arr[i]);
    }
    int min = arr[0];
    cout<<binary( n, m)<<endl;
  }
  return 0;
}
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
117 2
|
2月前
|
存储 运维 监控
局域网网络监控软件的设备连接日志哈希表 C++ 语言算法
针对局域网监控软件日志查询效率低的问题,采用哈希表优化设备连接日志管理。通过IP哈希映射实现O(1)级增删查操作,结合链地址法解决冲突,显著提升500+设备环境下的实时处理性能,内存占用低且易于扩展,有效支撑高并发日志操作。
167 0
|
9月前
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
252 3
|
算法 安全 Java
JVM学习日志(十) 垃圾回收算法
垃圾回收算法 简述
199 0
JVM学习日志(十) 垃圾回收算法
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
存储 算法 缓存
高并发架构设计三大利器:缓存、限流和降级问题之使用RateLimiter来限制操作的频率问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之使用RateLimiter来限制操作的频率问题如何解决
187 0
|
存储 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之滑动日志算法问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之滑动日志算法问题如何解决
176 0
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
309 0
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
211 0
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
227 0
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)

热门文章

最新文章