首页 > 编程语言 >分治算法学习

分治算法学习

时间:2023-09-06 20:55:05浏览次数:44  
标签:map int max 分治 学习 算法 num 数组 mymap

image

思路分析:

  • 先找根(最大值)分为左右子树,转化为构建最大的左右子树,很明显,这里需要用到递归
  • 算法实现
#include<bits/stdc++.h>
using namespace std;
int nums[1001];
void constructMaxTree(int arr[],int l,int r){

	if(l>=r)  {
		cout<< arr[l]<<" ";
		return;
	}
	// 找到最大值的下标
	int max = -1;
	int index = l;
	for(int i = l;i<=r;i++){
		if(max < arr[i]){
			max = arr[i];
			index = i;
		}
	}
	cout<<max<<" ";
	if(index==l){
		cout<< "null ";
		constructMaxTree(arr,index+1,r);
		return;
	}

	constructMaxTree(arr,l,index-1);
	if(index==r){
		cout<< "null ";
		return;
	}
	constructMaxTree(arr,index+1,r);
	return;
}
int main(){
	int i=0;
	int a;
	while(cin>>a){
		nums[i++] = a;
	}
	constructMaxTree(nums,0,i-1);
} 

image

思路分析

  • 分治思想: 如果整数m在数组中为众数,那么将数组分层两半,那么m一定至少也是其中一边的众数
  • 暴力:遍历数组,用map存储每个元素的出现的频率

代码

  • 暴力:
#include <iostream>
#include <map>
using namespace std;
int main() {
    map<int, int> mymap;
    int n;
    int num;
    cin >> n;
    int nn = n;
    while (n--) {
        cin >> num;
        // 使用find函数查找key是否存在于map中
        if (mymap.find(num) != mymap.end()) {
            mymap[num]++;
        } else {
            mymap[num] = 1;
        }
    }
    // 找出mymap中value最大值,比较n/2
    map<int, int>::iterator it = mymap.begin();
    map<int, int>::iterator maxit;
    int max = -1;
    while (it != mymap.end()) {
        if (max < it->second) {
            max = it->second;
            maxit = it;
        }
        ++it;
    }
    if (max > nn / 2) {
        cout << maxit->first;
    }
    return 0;
}

image

思路分析

  • 一个数的数组[a]的最大和的连续的子数组是他自己[a]

  • 两个数的[a,b]数组的最大和的连续的子数组是max([a,b],[b])

  • ......

  • 所以推出:求一个数组的最大和的连续子序列[a,b,c,d,e,f],可以类推为求,这个数组的少一元素的子数组的最大和子序列(考虑要不要加入这个元素)max [a,b,c,d,e],[a,b,c,d,e,f]

  • 上代码

#include<bits/stdc++.h>
using namespace std;
int findMax(vector<int> v){
	int max = 0;
	int res = max;
	for(int i=0;i<v.size();i++){
		if(max+v[i] <= v[i]){
			max = v[i];
		}else{
			max = max+v[i];
		}
		if(max > res){
			res = max;			
		}
	}	
	return res;
} 


int main() {
   vector<int> v;
   int n;
   cin >> n;
   int val;
   for(int i=0;i<n;i++){
   		cin >> val;
   		v.push_back(val);
   }
   cout<<findMax(v);
}

标签:map,int,max,分治,学习,算法,num,数组,mymap
From: https://www.cnblogs.com/maoshine/p/17683359.html

相关文章

  • Vue源码学习(二):<templete>渲染第一步,模板解析
    好家伙, 1.<template>去哪了在正式内容之前,我们来思考一个问题,当我们使用vue开发页面时,<tamplete>中的内容是如何变成我们网页中的内容的? 它会经历四步:解析模板:Vue会解析<template>中的内容,识别出其中的指令、插值表达式({{}}),以及其他元素和属性。生成AST:解析模......
  • 《Java编程思想第四版》学习笔记25
    若调用了break和continue语句,finally语句也会得以执行。请注意,与作上标签的break和continue一道,finally排除了Java对goto跳转语句的需求。                                       ......
  • 《Java编程思想第四版》学习笔记24
    //:FinallyWorks.java//ThefinallyclauseisalwaysexecutedpublicclassFinallyWorks{staticintcount=0;publicstaticvoidmain(String[]args){while(true){try{//post-incrementiszerofirsttime:......
  • C++ 算法竞赛、02 周赛篇 | AcWing 第2场周赛
    AcWing第2场周赛竞赛-AcWing3626三元一次方程AcWing3626.三元一次方程-AcWing两层循环#include<iostream>usingnamespacestd;voidfind(intn){for(intx=0;x<=1000/3;x++){for(inty=0;y<=1000/5;y++){int......
  • Markdown学习
    标题名字   HelloWord!HelloWord!HelloWord!HelloWord!  ![截图]( ) 超链接跳转csdn表格姓名年龄年纪张三199  ABCD1234 ......
  • 算法刷题:一步步优化系列01.最长连续序列
    题目链接:最长连续序列目录暴力解法(超时)优化内层查找(On->O1但超时)问题:重复的边界会重新迭代优化重复迭代:在值域而非定义域迭代,去重(超时)问题:值域大且元素离散度大时,会大量迭代到不存在的元素,空迭代优化空迭代:HashSet去重,每次迭代的元素都存在(26ms)从左边界重......
  • 安防监控/视频汇聚/云存储/AI视频智能算法引擎:遛狗AI检测算法详解
    根据最新修订发布的《中华人民共和国动物防疫法》规定:遛狗不栓绳,养狗不办证、未定期接种疫苗等行为都是违法行为。作为一个合格的“铲屎官"出门遛狗一定要牵好狗绳,保护他人和爱犬的安全。但就算法律明文规定,还是有很多人无视法律法规,在外遛狗不牵绳,任其自由活动。在日常管理中,遛狗......
  • 方案:TSINGSEE青犀视频AI智能算法平台电动车入梯检测解决方案
    一、方案背景随着大众的出行要求逐渐提升,交通拥堵现象也随处可见,电动车出行,就成了大家的首选。随着电动车数量的激增,众多用户为了个人方便,大多在室内停放或充电,有的甚至停放在走道、楼梯间等公共区域,由于电瓶车车体大部分为易燃可燃材料,一旦起火,燃烧速度快,并产生大量有毒烟气,人员逃......
  • 密码协议学习笔记(2):密钥交换协议
    密钥交换协议:设计密钥交换协议的目的是在多个用户之间安全地协商出一个共享的会话密钥(用于对称加密协议).博主注:该类协议要求保证在可窃听信道的通信中密钥的安全,而在可篡改信道的通信中,密钥被篡改时可以被识别.Diffie-Hellman密钥交换协议:通信双方Alice,Bob约定素数阶......
  • 视频云存储/安防监控/AI分析/视频AI智能分析网关:垃圾满溢算法
    随着我国科技的发展和城市化进程加快,大家对于生活环境以及空气质量更加重视,要求越来越严格。城市街道垃圾以及生活区垃圾满溢已经成为城市之痛。乱扔垃圾,垃圾不入桶这些行为已经严重影响到了城市的美化问题。特别是炎热的夏日和雨水季节,大量垃圾堆放会释放有毒有害气体,暴雨过后,漂浮......