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

GXUOJ-算法-补题:22级《算法设计与分析》第一次课堂练习

2.最大子数组和

问题描述

代码解答

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int sum,n,a[N];
int res=-1;

int result(){
	for(int i=0;i<n;i++){
		if(sum<0)	sum=a[i];
		else{
			sum+=a[i];
			res=max(res,sum);
		}
	}
	return res;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i];
	int ans=result();
	cout<<ans;
}

3.买卖股票

问题描述

代码解答

#include<bits/stdc++.h>
using namespace std;

const int INF=0x3f3f3f3f;
int a,max1=-INF,min1=INF;
int main(){
	while(cin>>a){
		cin.get();
		max1=max(max1,a-min1);
		min1=min(a,min1);
	}
	cout<<max1;
} 

4.数组中的逆序对

问题描述

代码解答

#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int arr[N], temp[N], n;

// 归并函数,用于计算逆序对数量并进行归并排序
long long merage(int arr[], int left, int right) {
    if (left >= right) return 0;
    int mid = (left + right) / 2;
    long long count = merage(arr, left, mid) + merage(arr, mid + 1, right);

    // 初始化索引,i指向左半部分的起始位置,j指向右半部分的起始位置,k指向临时数组的起始位置
    int i = left, j = mid + 1, k = left;
    // 合并两个已排序的子数组,并计算逆序对数量
    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j])
            // 将左半部分当前元素放入临时数组,并将i和k指针后移
            temp[k++] = arr[i++];
        else {
            // 将右半部分当前元素放入临时数组,并将j和k指针后移
            // 此时,因为左半部分当前元素大于右半部分当前元素,
			//所以左半部分从i到mid的元素都与当前的arr[j]构成逆序对,因此逆序对数量增加mid - i + 1
            temp[k++] = arr[j++];
            count += mid - i + 1;
        }
    }

    // 如果左半部分还有剩余元素,将它们放入临时数组
    while (i <= mid) temp[k++] = arr[i++];
    // 如果右半部分还有剩余元素,将它们放入临时数组
    while (j <= right) temp[k++] = arr[j++];

    // 将临时数组中的元素复制回原数组
    for (int index = left; index <= right; index++) {
        arr[index] = temp[index];
    }

    return count;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) cin >> arr[i];
    cout << merage(arr, 0, n - 1) << endl;
    return 0;
}

去除注释

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int arr[N],temp[N],n;

long long merage(int arr[],int left,int right){
	if(left>=right)	return 0;
	int mid=(left+right)/2;
	long long count=merage(arr,left,mid)+merage(arr,mid+1,right);
	
	int i=left,j=mid+1,k=left;
	while(i<=mid&&j<=right){
		if(arr[i]<=arr[j])	temp[k++]=arr[i++];
		else{
			temp[k++]=arr[j++];
			count+=mid-i+1;
		}
	}
	while(i<=mid)	temp[k++]=arr[i++];
	while(j<=right)	temp[k++]=arr[j++];
	
	for(int index=left;index<=right;index++){
		arr[index]=temp[index];
	}
	return count;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++)	cin>>arr[i];
	cout<<merage(arr,0,n-1)<<endl;
	return 0;
}


http://www.kler.cn/a/464881.html

相关文章:

  • PDF文件提示-文档无法打印-的解决办法
  • 基于ESP32的桌面小屏幕实战[5]:PCB下单
  • C++并发:并发操作的同步
  • 代码随想录算法训练营第二十四天-回溯算法-90. 子集II
  • 计算机网络 (15)宽带接入技术
  • windows终端conda activate命令行不显示环境名
  • Apache MINA 反序列化漏洞CVE-2024-52046
  • SpringMVC(五)实现文件上传
  • 数据挖掘教学指南:从基础到应用
  • 单片机端口操作和独立引脚操作
  • 【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习
  • 《小型支付商城系统》项目(一)DDD架构入门
  • 行为模式5.中介者模式-聊天室收发消息
  • 在React中引入tailwind css(图文详解)
  • PyTorch快速入门
  • 制作一个类似ChatGPT的AI对话网站,模型能力使用ChatGPT
  • Pycharm访问 Redis 数据库
  • 语音识别基础算法——动态时间规整算法
  • 机器学习基础-卷积的计算
  • 全新免押租赁系统助力商品流通高效安全
  • 【大模型实战篇】LLaMA Factory微调ChatGLM-4-9B模型
  • 智能客户服务:科技如何重塑客户服务体验
  • IDEA2023.1修改默认Maven配置
  • 0基础跟德姆(dom)一起学AI 自然语言处理08-认识RNN模型
  • 如何在notepad++里面,修改注释颜色
  • 什么是区块链的“智能合约”