log算法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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;
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
4月前
|
存储 算法 缓存
高并发架构设计三大利器:缓存、限流和降级问题之使用RateLimiter来限制操作的频率问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之使用RateLimiter来限制操作的频率问题如何解决
|
4月前
|
存储 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之滑动日志算法问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之滑动日志算法问题如何解决
|
算法 安全 Java
JVM学习日志(十) 垃圾回收算法
垃圾回收算法 简述
68 0
JVM学习日志(十) 垃圾回收算法
|
6月前
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
91 0
|
6月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
71 0
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
121 0
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)
|
缓存 算法 Java
JVM学习日志(七) 如何判断对象可以回收可达性分析算法
如何判断对象可以回收可达性分析算法 简述
130 0
JVM学习日志(七) 如何判断对象可以回收可达性分析算法
|
运维 监控 算法
事件日志分析算法:提升上网行为管理软件的智能监控
随着互联网的快速发展,网络安全和上网行为管理变得越来越重要了。不少企业和组织为了维护网络的安全、稳定性,还有员工的工作效率,都开始使用上网行为管理软件。这些软件的作用就是监控、分析和控制员工的上网行为,帮助组织管理网络资源,以免潜在的网络威胁和数据泄漏。其中,事件日志分析算法发挥了关键作用,它们有各种各样的优点和用途,真的非常实用。接下来,就让我们来看看,事件日志分析算法在这方面有哪些厉害的地方以及怎么用吧!
206 0