刷题日志(5)two pointers

本文介绍了数组交换的原理,指出在函数中传递数组实际上是传递地址,因此能修改原数组。讨论了排序算法,特别是归并排序的实现,包括如何使用两个指针i和j进行分类操作,并展示了快排中随机数的使用。最后,提供了一个C++代码示例,演示了合并两个已排序数组并找到中位数的过程,表明直接使用merge并未导致超时问题。
摘要由CSDN通过智能技术生成

杂记:

数组交换是成立,写在函数里,作为引用类型,副本是传过去的地址,引用地址就能真正修改数组的元素

10^{10}是不能接受的复杂度。n^{2}当n=10^{5}时就会出问题了。

概述

就是取俩指针,i,j,根据某个条件的(通常三种)判定情况分类为不同操作,即可。

注意merge函数:

algorithm

af,al,bf,bl,c即可。

mergesort:{

mid=(left+right)/2;

if(left<right)

mergesort(left,mid)

mergesort(mid+1,right)

merge(left,mid,mid+1,right)

//分成长度为一的若干数组,其实排序是merge完成的

}

非递归p141

快排:qsort

随机数用法

srand ((usigned)time(null))

12/6

A1085

简单

A1089

思路差不多,晚点来做

A1029

#include<cstdio>
#include<algorithm>

using namespace std;
 long int n1[2000010],n2[2000010],n3[4000010];
int main(){
int n,m;
scanf("%d",&n);
if(n!=0){
    for(int i=0;i<n;i++)
scanf("%ld",&n1[i]);
}
    
scanf("%d",&m);
    for(int i=0;i<m;i++)
scanf("%ld",&n2[i]);
    
    
    merge(n1,n1+n,n2,n2+m,n3);

printf("%ld",n3[(n+m-1)/2]);
    return 0;
}

虽然答案写的很谨慎,但是直接merge也没超时

merge和答案给的其实是一样的,答案就是没执行完的merge

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值