不同语言在算法使用方面的差异(Java 、C++篇)

news2024/12/30 2:37:29

由于我认为的会了是能得到结果了,所以我亲自去把题解的C++代码给改成了Java的,尽管代码和逻辑上的高度统一。编译器还是报错了。

第三个死都过不去。而且后面的还超时了。

这使我十分怀疑是不是超时或者空间不够所导致的。但是去问讯飞星火,它说超时或者空间会Runtime 什么的,就觉得还是代码逻辑的错了。

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    int N = scan.nextInt();
		int K = scan.nextInt();
		scan.nextLine();
		int number = 0;
		int[] sum = new int[N + 1];
		int[] f = new int[K];
		
		for (int i = 1; i <= N; i++) {
			sum[i] = scan.nextInt() + sum[i - 1];
			scan.nextLine();
		}
		
		for (int i = 0; i <= N ; i++) {
			
			number += f[ sum[i] % K ]; 
			f[ sum[i] % K ] ++;
	}
		
		System.out.println(number);
		
	}
}

然而我怎么检查和对照都找不到问题,就当我快要对这个卡了我几个小时崩溃小时的问题放手的时候,我想起之前题解和讨论区里有说要用到long long我给忽略了。这马上就回去找。

好家伙,连错误的原因都一样——

题解里也是

再看看修改的源代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,s[100005],ans=0,xb[100005];//s前缀和数组,xb用于存储模数
signed main(){
    cin>>n>>k;
    for(int i=1,t;i<=n;i++)
        cin>>t,s[i]=s[i-1]+t;
    for(int i=0;i<=n;i++)//注意!必须从0开始
        ans+=xb[s[i]%k]++;//有n个模数相同中间就有(n-1)段和为k的倍数
    cout<<ans;
    return 0;
}
#define int long long

有一个这个,我问了问讯飞,它告诉我

这是把 int 全部变成了 long long类型

这才恍然大悟,原来是数据溢出导致的

然而Java没有long long数据类型,而且Java的long类型和C++的是一样大的。更大的只能是BigInteger,然而。。。

import java.math.BigInteger;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        BigInteger N = scan.nextBigInteger();
        BigInteger K = scan.nextBigInteger();
        scan.nextLine();
        BigInteger number = BigInteger.ZERO;
        BigInteger[] sum = new BigInteger[N.intValue() + 1];
        BigInteger[] f = new BigInteger[K.intValue()];

        for (int i = 1; i <= N.intValue(); i++) {
            sum[i] = scan.nextBigInteger().add(sum[i - 1]);
            scan.nextLine();
        }

        for (int i = 0; i <= N.intValue(); i++) {
            number = number.add(f[sum[i].mod(K).intValue()]); // 修改这里
            f[sum[i].mod(K).intValue()] = f[sum[i].mod(K).intValue()].add(BigInteger.ONE); // 修改这里
        }

        System.out.println(number);
    }
}

会导致

直接爆了。

一般来说,对于相同逻辑的算法,C++的性能通常优于Java。这主要是由于以下几个原因:

  1. 编译与解释: C++是一种编译型语言,源代码在执行前被编译成机器码,因此执行速度快。 Java是解释型语言(尽管也有JIT编译,但与传统的编译语言相比有所不同),代码在运行时需要被解释或即时编译,这会带来额外的开销。

  2. 运行时环境: Java程序运行在Java虚拟机(JVM)上,JVM提供了跨平台的便利,但也带来了性能上的开销。 C++直接运行在操作系统之上,没有额外的运行时环境,因此通常具有更快的执行速度。

  3. 内存管理: C++允许程序员直接管理内存,这可以使内存分配更加高效,但同时也增加了出错的风险。 Java有自动垃圾回收机制,虽然简化了内存管理,但可能会增加内存和时间的开销。

  4. 系统调用和库函数: C++可以直接调用操作系统的API,减少了中间层的开销。 Java的系统调用需要通过JVM,可能会有额外的开销。

  5. 优化: C++编译器可以进行广泛的优化,包括针对特定硬件的优化。 Java代码的优化由JVM负责,可能不如C++编译器那么深入或针对性强。

  6. 数据类型和结构: C++中的数据类型和结构通常更紧凑,没有额外的对象头信息等。 Java中的对象包含额外的信息,如对象头、类型信息等,这会增加内存的使用。

  7. 泛型和模板: C++的模板在编译时实例化,不会产生额外的运行时开销。 Java的泛型在运行时通过擦除实现,可能会引入一些额外的类型检查和转换开销。

  8. 异常处理: Java的异常处理机制可能会引入额外的时间和内存开销。 C++的异常处理(如果使用)通常更直接,开销较小。

是这样的。有的算法Java不能直接用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1624648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自有道 更从容——林肯携“四大美式客厅”登陆北京国际车展,以传世豪华 优雅从容为品牌注入全新内涵

【北京 2024年4月25日】传世豪华&#xff0c;优雅从容。今日&#xff0c;第十八届北京国际汽车展览会正式启幕。作为美式豪华品牌的引领者&#xff0c;林肯在此次北京车展为“豪华 自有其道”注入全新内涵&#xff0c;并以车展首创的四大美式客厅形式诠释不同的人生境界&#x…

AWS制作WordPress在国内外的利弊?

AWS作为全球领先的云计算服务供应商&#xff0c;为WordPress提供了强大且灵活的托管环境&#xff0c;使用AWS来搭建和运行WordPress无疑是个不错的选择。即便如此使用AWS制作还是会有些许利弊&#xff0c;九河云作为AWS的合作伙伴来为读者们仔细探讨AWS在WordPress的利弊。 利&…

diskMirror docker 使用容器部署 diskMirror 服务器!!!

Welcome to diskMirror-docker 获取项目 这个项目是 diskMirror-spring-boot 镜像版本的项目&#xff0c;您可以使用下面的命令将此项目编译为一个镜像&#xff01; # 进入到您下载的源码包目录 cd diskMirror-docker# 点击脚本来进行版本的设置以及对应版本的下载 设置 和 编…

Linux 安装 nvm,并使用 Jenkins 打包前端

文章目录 nvm是什么nvm下载nvm安装设置 nvm 环境变量设置 Jenkins 打包命令 nvm是什么 nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装…

artifactory配置docker本地存储库

​一、概述 本地 Docker 存储库是我们部署和托管内部 Docker 镜像的位置。实际上&#xff0c;它是一个 Docker 注册表&#xff0c;能够托管的 Docker 镜像的集合。通过本地存储库&#xff0c;你可以保存、加载、共享和管理自己的 Docker 镜像&#xff0c;而无需依赖于外部的镜像…

简单的jmeter脚本自动化

1、创建线程组&#xff0c;定义自定义变量&#xff0c;保存请求默认值 2、用csv编写测试用例 3、使用csv文件读取测试用例 4、创建http请求 5、添加相应断言 6、运行结果

vue中使用echarts实现X轴动态时间(天)的折线图表

项目要求x轴以一天为间隔&#xff0c;时间是动态返回的数据&#xff0c;折线图平滑展示 实现代码如下&#xff1a; <div class"echarts-main"><v-chart ref"echarts" :options"options" /> </div>// 局部引入vue-echarts im…

ios CI/CD 持续集成 组件化专题一 iOS 将图片打包成bundle

一、 创建 选择 macos 下的Bundle 二 、取名点击下一步 三、Base SDK 选择ios 四 、Build Active Architecture Only 五、Installation后面的内容删除 六、Skip Install 选择NO 七、Strip Debug Symbols During Copy 中"Release"项设置为 "YES" 八、COM…

ansible-copy用法

目录 概述实践 概述 ansible copy 常用用法举例 实践 # with_fileglob 是 Ansible 中的一个循环关键字&#xff0c;用于处理文件通配符匹配的结果 # 遍历 addons/files/*.txt文件 # dest: /data/soft/test 目录要事先存在,才能正常的copy - name: Copy configuration filescop…

【threejs教程8】threejs添加3D场景键盘控制

【完整效果代码位于文章末】 目录 准备工作 目标 步骤1&#xff1a;初始化按键状态对象 步骤2&#xff1a;监听键盘事件 步骤3&#xff1a;编写事件处理函数 步骤4&#xff1a;更新相机移动方向 总结 完整代码如下 在3D应用开发中&#xff0c;用户交互是一个关键…

JS实现对用户名、密码进行正则表达式判断,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

openstack界面简单修改

openstack Ubuntu主题登录界面修改修改登陆界面背景登录框边缘添加透明效果修改登录界面logo更换站点图片更换项目logo图片 本实验基于VMware17&#xff0c;使用Ubuntu2310搭建openstack-B版 Ubuntu主题 以下配置只对Ubuntu主题生效 登录界面修改 原界面 关闭登录界面域名输…

HTTP与HTTPS 对比,区别详解(2024-04-25)

一、简介 HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上&#xff0c;通常使用端口 80。 HTTPS&#xf…

百度沈抖:智能,生成无限可能

4月16日&#xff0c;Create 2024百度AI开发者大会在深圳举行。会上&#xff0c;百度集团执行副总裁、百度智能云事业群总裁沈抖正式发布新一代智能计算操作系统——百度智能云万源。它能管理万卡规模的集群&#xff0c;极致地发挥GPU、CPU的性能&#xff1b;它有强大的大模型作…

【树莓派】yolov5 Lite,目标检测,树莓派4B,推理v5lite-e_end2end.onnx,摄像头实时目标检测

文章目录 YOLOv5 Lite: 在树莓派上轻松运行目标检测1. 环境配置2. 克隆项目3. 安装依赖项4. 下载模型权重5. 理解end2end的含义6. 示例推理7. 文件介绍8. 把文件弄到树莓派4B执行9. 进一步尝试fp16的onnx&#xff08;行不通&#xff09;10. 视频流检测 这里有大概的环境配置&am…

太速科技-多路PCIe的阵列计算全国产化服务器

多路PCIe的阵列计算全国产化服务器 多路PCIe的阵列计算全国产化服务器以国产化处理器&#xff08;海光、飞腾ARM、算能RSIC V&#xff09;为主板&#xff0c;扩展6-8路PCIe3.0X4计算卡&#xff1b; 计算卡为全国产化的AI处理卡&#xff08;瑞星微ARM&#xff0c;算能AI&#x…

【预测】小米汽车电子电气架构的猜想

文章目录 前言 整车EEA 硬件平台 软件平台 总结 参考资料 前言 见《【Review】小米汽车发布会》 整车EEA 小米汽车整车电子电气架构方面的信息&#xff0c;小米官方并没有对外介绍&#xff0c;但是从近日流出的整车BOM和供应商列表中看到&#xff0c;车上各种控制器一个都…

四川易点慧电子商务:抖音小店引领潮流,先进模式打造电商新标杆

在当下数字化浪潮中&#xff0c;电子商务行业如日中天&#xff0c;四川易点慧电子商务有限公司以其独特的视角和前瞻性的战略布局&#xff0c;成功在抖音小店领域崭露头角&#xff0c;成为行业内的佼佼者。本文将深入剖析四川易点慧电子商务的成功秘诀&#xff0c;以及其在抖音…

基于OpenCV的人脸签到系统

效果图 目录文件 camerathread.h 功能实现全写在.h里了 class CameraThread : public QThread {Q_OBJECT public:CameraThread(){//打开序号为0的摄像头m_cap.open(0);if (!m_cap.isOpened()) {qDebug() << "Error: Cannot open camera";}//判断是否有文件,人脸…

OmniPlan Pro for Mac v4.8.0中文激活版 项目流程管理工具

OmniPlan Pro for Mac是一款功能强大的项目管理软件&#xff0c;它以其直观的用户界面和丰富的功能&#xff0c;帮助用户轻松管理各种复杂的项目。 OmniPlan Pro for Mac v4.8.0中文激活版 通过OmniPlan Pro&#xff0c;用户可以轻松创建任务&#xff0c;设置任务的开始和结束时…