2024.6.6学习java&算法
java---
对象赋值:
新建类class person包含String name和int age两个属性
在main方法中new person xiaoming,name为"xiaoming",age为19。
new person tiedan,tiedan=xiaoming。
输出tiedan的属性得到"xiaoming,19"
tiedan.name="tiedan"
输出xiaoming的属性得到"tiedan,19"
解释:tiedan和xiaoming两个对象在main的栈帧中储存的是两个地址,指向堆中new出的一片内存,在堆中储存着对象的属性。
tiedan=xiaoming这个语句相当于将xiaoming指向的地址赋值给了tiedan,二者指向同一地址(相当于数组赋值,实际是引用)由此,由于tiedan和xiaoming均指向一个地址,修改tiedan.name后再输出xiaoming.name发现也被修改了。
算法---
1.洛谷P1177 【模板】排序:
将读入的 N 个数从小到大排序后输出。
输入样例:
5
4 2 4 5 1
输出样例:
1 2 4 4 5
解答:
使用stl中的sort函数,读入数据储存在int ans[100010],sort(ans,ans+N)
我们设我们排序的数组为 a,排序区间为 [l,r),且从小到大排序。则调用方法为:
sort(a + l, a + r);
如果想改变排序顺序,重载cmp函数即可
bool cmp(int a,int b){
return a>b;
}(大于号就是从大到小,小于号就是默认,从小到大)
快排复杂度
2.洛谷P1923 【深基9.例4】求第 k 小的数:
输入样例:
5 1
4 3 2 1 5
输出样例:
2
解答:
数据范围是n<5000000,利用快排算法的二分属性,可以在时间复杂度O(nlogn)下实现
int x[5000100]储存输入数据,找第k小
void qsort(int l,int r){
int i=l,j=r,mid=x[(l+r)/2];
do{
while(x[j]>mid) j--;
while(x[i]<mid) i++;
if(i<=j){
swap(x[i],x[j]);
i++;
j--;
}
}
while(i<=j);//至此数组被划分为l<=j<=i<=r
if(k<=j) qsort(l,j);
else if(k>=i) qsort(i,r);
else {
cout>>x[j+1];
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构