Java刷题-基础篇

目录

题目1:改变原有数组元素的值

题目2:奇数位于偶数之前

题目3:两数之和

题目4:只出现一次的数字

题目5:多数元素

题目6:存在连续三个奇数的数组


题目1:改变原有数组元素的值

题目详细说明:实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素乘以 2 , 并设置到对应的数组元素上,例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}。

思路:在main方法中定义一个数组,将该以参数的方式传递给transform方法,在transform方法中用循环的方式遍历数组中的每个元素,并将其元素的值*=2,使得每个元素的值变为原来的二倍;transform方法并不需要返回值,因为,数组传参传递的是地址(虽然Java中没有地址的概念,但我觉得这样好理解)。

    public static void transform(int[] array) {for (int i = 0; i < array.length; i++) {array[i] *= 2;}}public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};transform(array);System.out.println(Arrays.toString(array));[2,4,6,8,10]}

题目2:奇数位于偶数之前

题目详细说明:调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。如数组:[1,2,3,4,5,6],调整后可能是:[1, 5, 3, 4, 2, 6]。

思路:这道题与翻转数组很类似,本质都是将数组中的两个元素的值做互换。因此我们可以先定义left、right整型变量表示左、右元素的下标,但我们并不能像翻转数组一样直接让left、right下标对应的元素直接做互换,因为本题的要求是将所有奇数放在偶数前,如果left、right下标对应的元素都是偶数或奇数,或left下标对应元素是奇数,right下标对应元素是偶数这三种情况是不用互换的,只有当left下标对应元素是偶数,right下标对应元素是奇数才互换,因此在互换元素前要先判断left、right下标对应元素是否符合互换的条件,不符合时left++或right--。不过在写条件时,我们要考虑到一种特殊情况的存在,当我们定义的数组所有的元素都是奇数,那么在互换元素前判断left下标对应元素是否符合互换的条件时,它总是不符合的,这样left一直++,会导致越界访问,因此在互换元素前判断left、right下标对应元素是否符合互换的条件时要在条件中加上left<right,防止越界。

    public static void func(int[] array) {int left = 0;int right = array.length - 1;while (left < right) {if (left < right && array[left] % 2 != 0) {left++;}if (left < right && array[right] % 2 == 0) {right--;}int cur = array[left];array[left] = array[right];array[right] = cur;}}public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5, 6};func(array);System.out.println(Arrays.toString(array));//[1,5,3,4,2,6]}

题目3:两数之和

题目详细说明:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两整数,并返回它们在数组中的下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9 

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 

思路:方法是不能返回两个值的,因此我们可以定义一个数组,将要返回的值用装入数组中,最后让数组返回即可(注意这种做法在C语言中是不允许的,在Java中可以是因为对象所开辟的空间在堆中,只要堆中的数据仍在被利用,那么对应的内存空间就不会被销毁)。以上面示例1为具体分析对象,一个数组中每两个元素的和的情况可以是加号左边是2,右边可以是7、11、15;加号左边是7,右边可以是11、15;加号左边是11,右边可以是15。我们可以定义变量i、j分别代表加号左右两边的操作数在数组中的下标,采用循环嵌套的方式,外层循环控制加号左边的操作数,内层循环控制加号右边的操作数,如果两个操作数之和==target,就将i和j分别存入预先开辟好的数组中,最后返回数组即可。

    public static int[] func(int[] array, int target) {int[] cur = {-1, -1};for (int i = 0; i < array.length - 1; i++) {for (int j = i + 1; j < array.length; j++) {if (array[i] + array[j] == target) {cur[0] = i;cur[1] = j;return cur;}}}return cur;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int target = scan.nextInt();int[] array = {2, 7, 11, 15};int[] cur = func(array, target);System.out.println(Arrays.toString(cur));}

题目4:只出现一次的数字

题目详细说明:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

思路:本题利用按位异或的特性即可(a ^ a = 0,a ^ 0 = a)

    public static int func(int[] array) {int num = array[0];for (int i = 1; i < array.length; i++) {num ^= array[i];}return num;}public static void main(String[] args) {int[] array = {1, 2, 2, 3, 3};int num = func(array);System.out.println(num);}

题目5:多数元素

题目详细说明:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素

示例 1:

输入:[2,2,1,1,1,2,2]

输出:2

思路:这道题其实有一个技巧,我们可以先用Arrays.sort先将数组快排一下,既然题目中说多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素,那么我们拿到快排后数组下标为n/2的元素,这个元素里面的值就我们要找的多数元素。

    public static void main(String[] args) {int[] array = {2, 2, 1, 1, 1, 2, 2, 2};Arrays.sort(array);//打印看一下快排的结果System.out.println(Arrays.toString(array));//打印多数元素的值System.out.println(array[array.length / 2]);}

题目6:存在连续三个奇数的数组

题目详细说明:给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true;否则,返回 false 。

示例 1:

输入:arr = [2,6,4,1]

输出:false

示例 2:

输入:arr = [1,2,34,3,4,5,7,23,12]

输出:true

思路:定义一个计数器count用于记录是否存在了三个元素连续十奇数的情况,遍历整个数组,如果元素是奇数count++,并判断一下count是否==3,如果等于就return true;如果元素是偶数count就置为0,如果遍历数组结束了都还没返回的话,就返回false即可。

    public static boolean func(int[] array) {int count = 0;for (int i = 0; i < array.length; i++) {if (array[i] % 2 !=  0) {count++;if (count == 3) {return true;}} else {count = 0;}}return false;}public static void main(String[] args) {int[] array = {1, 2, 3, 5, 7, 8, 10};System.out.println(func(array));}

    本篇文章已完结,谢谢支持哟 ^^ !!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++基础与函数解析 | 函数的声明与定义 | 函数调用 | 函数详解 | 函数重载 | 重载解析 | 递归函数 | 内联函数 | 函数指针

文章目录 一、函数基础1.基本函数定义2.函数的声明与定义3.函数调用 二、函数详解1.参数2.函数体3.返回类型 三、函数重载与重载解析1.函数重载2.重载解析 四、函数相关的其他内容1.递归函数2.内联函数3.constexpr函数&#xff08;C11起&#xff09;4.consteval 函数 (C20 起 )…

什么是直接内存(NIO)

直接内存不受 JVM 内存回收管理&#xff0c;是虚拟机的系统内存&#xff0c;常见于 NIO 操作时&#xff0c;用于数据 缓冲区&#xff0c;分配回收成本较高&#xff0c;但读写性能高&#xff0c;不受 JVM 内存回收管理。 举例 当上传一个较大文件&#xff08;200M&#xff09;…

构建智能电子商务系统:数字化引领未来商业发展

随着互联网技术的飞速发展和消费者行为的变革&#xff0c;电子商务系统的重要性日益凸显。在这一背景下&#xff0c;构建智能电子商务系统成为推动商业数字化转型的关键举措。本文将深入探讨智能电子商务系统的构建与优势&#xff0c;助力企业把握数字化转型的主动权。 ### 智…

Vue3商城后台管理实战-用户登录界面设计

界面设计 此时界面的预览效果如下&#xff1a; 登录界面的完整代码如下&#xff1a; <script setup> import {reactive} from "vue/reactivity";const form reactive({username: "",password: "", })const onSubmit () > {} <…

位运算概述

首先 位运算这个东西在考试中十分容易考&#xff0c;所以要多多看一看位运算的相关知识&#xff0c;多刷一刷题之类的。 位运算的概念 位运算就是二进制数据进行运算的运算符。 注意&#xff1a;通常我们用二进制补码来表示&#xff0c;补码的符号位也是要参与运算的。 通常的…

Hadoop 3.4.0 项目实战

1环境基于 上一篇搭建 高可用分布式集群 2 官方提供MapReduce程序 #评估圆周率 cd /data/hadoop/share/hadoop/mapreduce/ hadoop jar hadoop-mapreduce-examples-3.4.0.jar pi 2 6 3 实例项目分析1 #预分析的文件如&#xff0c;如单词统计 # #上传文件到hdfs hdfs …

高通QCS6490开发(四):FV01 AI开发板系统烧录

本期主要介绍如何在FV01开发板上烧录镜像 所用硬件有&#xff1a; FV01开发板和type C线 操作步骤如下&#xff1a; 首先连接电源线开机&#xff0c;然后通过Type C线连接FV01开发板和PC&#xff0c;接线如下&#xff1a; 1&#xff09;将设备通过如下命令进入到EDL紧急下载…

三.使用HashiCorp Vault工具管理数据库

三.ubuntu安装使用HashiCorp Vault工具管理数据库 HashiCorp Vault 是一个基于身份的秘密和加密管理系统。机密是您想要严格控制访问的任何内容,例如 API 加密密钥、密码和证书。Vault 提供由身份验证和授权方法门控的加密服务。使用 Vault 的 UI、CLI 或 HTTP API,可以安全…

Web3与物联网:构建智能连接的数字世界

引言 随着互联网的不断发展&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;作为一种新兴的信息技术&#xff0c;正在逐渐渗透到我们的生活和工作中。而随着Web3的兴起&#xff0c;物联网将迎来新的发展机遇。本文将探讨Web3与物联网的结合&#xff0c;如何…

废品回收 小程序+APP功能介绍

基于您提供的废品回收应用的开发需求&#xff0c;以下是基于Uniapp&#xff08;用户端和回收员端&#xff09;、Thinkphp5&#xff08;后台&#xff09;、MySQL&#xff08;数据库&#xff09;的综合解决方案的概述。 一、技术栈选择 前端&#xff1a;Uniapp&#xff08;跨平…

软考--试题六--中介者模式(Mediator)

中介者模式(Meditor) 意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互 结构 适用性 1、一组对象以定义良好但是复杂的方式进行通信&#xff0c;产生的相互依赖关…

C语言性能深度剖析:从底层优化到高级技巧及实战案例分析

C语言以其接近硬件的特性、卓越的性能和灵活性&#xff0c;在系统编程、嵌入式开发和高性能计算等领域中占据着举足轻重的地位。本文将深入探讨C语言性能优化的各个方面&#xff0c;包括底层原理、编译器优化、内存管理和高级编程技巧&#xff0c;并结合多个代码案例来具体分析…