首页 > 其他分享 >分治思想求众数_虽然效率不好_但是便于学习分治的思想方法

分治思想求众数_虽然效率不好_但是便于学习分治的思想方法

时间:2024-05-12 20:52:50浏览次数:20  
标签:count right 思想 int 分治 num ans 众数 find

//解释:

/*采用分治法的思想在这道题中的体现就是对于一个区间去分成两份,然后

count函数的作用是对于一个区间段的函数去进行统计某个数的个数

find函数的作用是负责把区间分开,然后对比两个区间中的出现次数更多的数,把这个数作为这两个区间合成的区间的众数。对比的依据就是count函数来对比的。

FIND函数就是对这个find一个汇总,多考虑一个特殊的空数组的情况。*/



#include <iostream> #include <vector> using namespace std; typedef vector<int>ve; ve vv = {1, 2, 2, 2, 3, 5}; int count(int l, int r, int x) { int ans = 0; for (int i = l; i <= r; i++) if (vv[i] == x) ans++; return ans; } int find(int l, int r) { if (l == r) return vv[l]; int mid = l + r >> 1; int left_num = find(l, mid); int right_num = find(mid + 1, r); int ans_left = count(l, r, left_num); int ans_right = count(l, r, right_num); if (ans_left > ans_right) return left_num; else return right_num; } int FIND(int n) { if (vv.size() == 0) return -1; return find(0, n - 1); } int main() { cout << FIND(6); }

  

标签:count,right,思想,int,分治,num,ans,众数,find
From: https://www.cnblogs.com/FJCLJ/p/18188157

相关文章

  • hash思想与字符串
    哈希思想与字符串窥见前两天听了一个学长讲字符串,KMP,Tire,DFA,AC自动机,马拉车...叽里呱啦的我这个小蒟蒻也听不明白。虽然但是学长在最后清了清嗓子,敲了敲黑板,拿出了镇场子的家伙——hash算法。听完之后,满座惊呼,醍醐灌顶,恍然大悟。我也这般激动,便趁着这股劲写下这篇窥见,随便纪念这......
  • 点分治
    点分治树的重心(前置芝士)如果在树中选择某个节点并删除,这棵树将分为若干棵子树,统计子树节点数并记录最大值。取遍树上所有节点,使此最大值取到最小的节点被称为整个树的重心。性质树的重心如果不唯一,则至多两个且相邻以树的重心为根时,所有子树的大小都不超过整棵树大小的......
  • 【DP】【分治】最大子数组和
    题源不要太激动,过拟合,一上来就开dp,这道题只用一个变量就可以记录前缀和了【转载】我觉得这道题目的思想是:走完这一生如果我和你在一起会变得更好,那我们就在一起,否则我就丢下你。我回顾我最光辉的时刻就是和不同人在一起,变得更好的最长连续时刻classSolution:defmaxSu......
  • cdq 分治
    1概念cdq分治,是一种分治思想而非具体算法。它是基于分治思想,将复杂的问题拆分求解。与一般分治算法不同的是,一般分治所拆分的子问题互相独立、互不干扰、形式与原问题一致。而在cdq分治中,每次划分出的两个子问题,是利用前面的子问题解决后面的子问题。也就是说,对于序列\([l,......
  • CF-797-E-根号分治
    797-E题目大意给定一个长为\(n\)序列\(a\),有\(q\)次询问:给定\(p,k\),你需要反复执行操作\(p=p+a_p+k\),直到\(p>n\)为止,问你要执行多少次操作。Solution考虑两种思路:1、暴力回答询问,每次反复模拟操作,直到\(p>n\)为止,时间复杂度\(O(q·\frac{n}{k})\)。2、预处理出......
  • 点分治
    点分治本质就是树上的分治。序列的分治是不断地将序列二分,而对于树则需要利用树的重心。树的重心定义:树中一节点,以它为根的最大的子树最小。求解:跑一遍\(dfs\)求解即可。voidget_rt(intu,intfa){ siz[u]=1,max_siz[u]=0; for(autov:T[u]){ if(v.fir==fa|......
  • 洛谷2664树上游戏-点分治
    link:https://www.luogu.com.cn/problem/P2664lrb有一棵树,树的每个节点有个颜色。给一个长度为\(n\)的颜色序列,定义\(s(i,j)\)为\(i\)到\(j\)的颜色数量。以及\[sum_i=\sum_{j=1}^ns(i,j)\]现在他想让你求出所有的\(sum_i\)。一个暴力的想法:因为是求和,所以可以拆......
  • 快速幂的思想和code实现
     解法:浮点数快速幂的应用快速幂的思想就是倍增的思想5的20次方如果是一次一次乘需要5*5*5*5*5*5………20次乘法快速幂就是20(10)=00010100(2)20=4+16所以原来的就变成了:(a)(*)(a)a2(a*a)(*)(a*a)a4((a*a)*(a*a))(*)((a*a)*(a*a))a8(((a*a)*(a*a))*((a*a)*(a*a)......
  • KNN算法思想与Python实现
    古语说得好,物以类聚,人以群分;近朱者赤,近墨者黑。这两句话的大概意思就是,你周围大部分朋友是什么人,那么你大概率也就是这种人,这句话其实也就是K最近邻算法的核心思想。kNN(k-NearestNeighbor)法即k最邻近法,最初由Cover和Hart于1968年提出,是一个理论上比较成熟的方法,也是最简单的机......
  • dp 集合思想优化
    链接:https://ac.nowcoder.com/acm/contest/78807/D来源:牛客网时间限制:C/C++1秒,其他语言2秒空间限制:C/C++262144K,其他语言524288K64bitIOFormat:%lld题目描述Bingbong有一个长度为n的数字字符串S,该字符串仅包含[0,9]的数字。Bingbong想要从中挑选出若干个字符,......