“手撕“数组一些简单的习题

目录

1.数组转字符串

2.数组拷贝

3.求数组中元素的平均值

4.查找数组中指定元素(顺序查找)

5.查找数组中指定元素(二分查找)

6.数组排序(冒泡排序)

7.数组逆序


1.数组转字符串

先让我们看看为什么要转字符串:

int[] arr = {1,2,3,4,5,6};
System.out.println(arr);
// 执行结果
[I@4eec7777     //一个地址

也就是说我们直接打印数组出来的会是一个地址,因为数组里面存的其实是值的地址

代码如下:  

int[] arr = {1,2,3,4,5,6};
String newArr = Arrays.toString(arr);
System.out.println(newArr);
// 执行结果
[1, 2, 3, 4, 5, 6]

 Arrays.toString其实是一个方法,它可以直接帮我打印数组里面的值转成字符串。

Java 中提供了 java.util.Arrays 包, 其中包含了一些操作数组的常用方法.

2.数组拷贝

我们有Java提供的Arrays.copyOf方法:

代码如下:  

public static void func(){
// newArr和arr引用的是同一个数组
// 因此newArr修改空间中内容之后,arr也可以看到修改的结果
int[] arr = {1,2,3,4,5,6};
int[] newArr = arr;
newArr[0] = 10;
System.out.println("newArr: " + Arrays.toString(arr));
// 使用Arrays中copyOf方法完成数组的拷贝:
// copyOf方法在进行数组拷贝时,创建了一个新的数组
// arr和newArr引用的不是同一个数组
arr[0] = 1;
newArr = Arrays.copyOf(arr, arr.length);
System.out.println("newArr: " + Arrays.toString(newArr));
// 因为arr修改其引用数组中内容时,对newArr没有任何影响
arr[0] = 10;
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("newArr: " + Arrays.toString(newArr));
// 拷贝某个范围.
int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("newArr2: " + Arrays.toString(newArr2));
}

那它和int[] newArr=arr有上面本质区别呢? 

 

 

copyOf是重新创建一个新的空间把原来的值放进去,对newArr操作时,不会修改arr的值;而int[] newArr=arr是直接存着数组原来的地址,所以操作的时候,arr的值也会被修改。

我们当然也可以实现自己的拷贝数组的方法:

代码如下:  

public static int[] copyOf(int[] arr) {int[] ret = new int[arr.length];for (int i = 0; i < arr.length; i++) {ret[i] = arr[i];
}return ret;
}

3.求数组中元素的平均值

 给定一个整型数组, 求平均值

代码如下:  

public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.println(avg(arr));
}
public static double avg(int[] arr) {int sum = 0;for (int x : arr) {sum += x;
}return (double)sum / (double)arr.length;
}
// 执行结果
3.5

4.查找数组中指定元素(顺序查找)

给定一个数组, 再给定一个元素, 找出该元素在数组中的位置. 

代码如下:  

public static void main(String[] args) {int[] arr = {1,2,3,10,5,6};System.out.println(find(arr, 10));
}
public static int find(int[] arr, int data) {for (int i = 0; i < arr.length; i++) {if (arr[i] == data) {return i;
}
}return -1; // 表示没有找到
}
// 执行结果
3

5.查找数组中指定元素(二分查找)

针对有序数组, 可以使用更高效的二分查找。

那啥是有序数组,

有序分为 "升序" 和 "降序",比如:

1,2,3,4,5就是升序,为有序数组

5,4,3,2,1就是降序,也为有序数组 

以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较: 

如果相等,即找到了返回该元素在数组中的下标

如果小于,以类似方式到数组左半侧查找

如果大于,以类似方式到数组右半侧查找 

代码如下:  

public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.println(binarySearch(arr, 6));
}
public static int binarySearch(int[] arr, int toFind) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (left + right) / 2;if (toFind < arr[mid]) {
// 去左侧区间找right = mid - 1;
} else if (toFind > arr[mid]) {
// 去右侧区间找left = mid + 1;
} else {
// 相等, 说明找到了return mid;
}
}
// 循环结束, 说明没找到return -1;
}
// 执行结果
5

 随着数组元素个数 越多, 二分的优势就越大。

6.数组排序(冒泡排序)

给定一个数组, 让数组升序 (降序) 排序。这里以升序举例:

 

代码如下: 

public static void main(String[] args) {int[] arr = {9, 5, 2, 7};bubbleSort(arr);System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 1; j < arr.length-i; j++) {
if (arr[j-1] > arr[j]) {int tmp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = tmp;
}
}
} // end for
} // end bubbleSort
// 执行结果
[2, 5, 7, 9]

 冒泡排序性能较低. Java 中内置了更高效的排序算法(Arrays.sort方法):

public static void main(String[] args) {int[] arr = {9, 5, 2, 7};Arrays.sort(arr);System.out.println(Arrays.toString(arr));
}

7.数组逆序

给定一个数组, 将里面的元素逆序排列。

代码如下:  

public static void main(String[] args) {int[] arr = {1, 2, 3, 4};reverse(arr);System.out.println(Arrays.toString(arr));
}
public static void reverse(int[] arr) {int left = 0;int right = arr.length - 1;
while (left < right) {int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;
}
}

思路:设定两个下标, 分别指向第一个元素和最后一个元素,

交换两个位置的元素. 然后让前一个下标自增, 后一个下标自减, 循环继续即可。

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

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

相关文章

实验案例二:配置路由器实现互通

一.实验环境 实验用具包括两台路由器&#xff08;或交换机)&#xff0e;一根双绞线缆&#xff0c;一台PC&#xff0c;一条Console线缆。 二.需求描述 如图6.14所示&#xff0c;将两台路由器的Gig0/0接口相连&#xff0c;通过一台PC连接设备的Console端口并配置IP地址&#x…

分享一个纯HTML外贸公司通用企业html网站模板源码

纯HTML外贸公司通用企业html网站模板源码 源码地址&#xff1a;https://download.csdn.net/download/Highning0007/89150720

Jenkins用maven风格build报错解决过程记录

1、Jenkins2.453新建项目&#xff0c;构建风格选的maven 2、自由风格构建部署没有任何问题&#xff0c;但是maven风格build一直失败&#xff0c;报错如下图 3、解决方案&#xff1a;在系统管理–系统配置–Maven项目配置&#xff0c;删除全局MAVEN_OPT的路径信息&#xff0c;…

2.4G漂移小车电子方案 酷得智能科技

漂移高速遥控车是一种专门设计用于执行高速漂移动作的遥控车模型。以下是一些关于漂移高速遥控车的功能介绍&#xff1a; 1、高速性能&#xff1a;漂移车通常配备有强力的电机和电池&#xff0c;以便在保持高速的同时进行漂移动作。 2、漂移能力&#xff1a;漂移车的轮胎和悬挂…

Samtec应用分享 | 汽车应用中的视觉系统

【前言】 视觉系统在未来的汽车设计中扮演着关键的角色。 在过去&#xff0c;一直是由驾驶员掌握和应对道路上的危险&#xff0c;但现代车辆在保障驾驶安全方面发挥着前所未有的作用。 视觉系统&#xff0c;无论是可见光摄像头还是先进的探测系统&#xff0c;如激光雷达&…

【Java】通过poi给word首页添加水印图片

背景&#xff1a; poi并没有提供直接插入水印图片的方法&#xff0c;目前需要再word的首页插入一张水印图片&#xff0c;于是就需要通过另一种方式&#xff0c;插入透明图片&#xff08;png格式&#xff09;并将图片设置为“浮于文字上方”的方式实现该需求。 所需jar&#xf…

使用python采集VIP会电商平台商品数据②单页数据采集

获取标头&#xff1a; 响应&#xff1a;服务器返回的数据 预览&#xff1a;查看响应得数据 载荷&#xff1a;查询参数/请求参数 标头&#xff1a;查看请求的网址/请求的标头/请求方法 数据包地址&#xff1a;https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/mo…

Servlet-Filter实现反爬虫

以前用DotNetCore实现过反爬虫功能。在tomcat里面可以利用Servlet的Filter类实现请求的控制来达到反爬虫功能&#xff0c;进而增强JRT的web安全。 实现黑名单过滤器&#xff0c;对在黑名单列表的IP的所有请求都跳转到警告页面&#xff0c;业务各种请求自行定义加入黑名单 /* …

Yolo-world+Python-OpenCV之摄像头视频实时目标检测

上一次介绍了如何使用最基本的 Yolo-word来做检测&#xff0c;现在我们在加opencv来做个实时检测的例子 基本思路 1、读取离线视频流 2、将视频帧给yolo识别 3、根据识别结果 对视频进行绘制边框、加文字之类的 完整代码如下&#xff1a; import datetimefrom ultralytics …

电竞陪玩系统开发平台搭建(小程序,公众号,app)线上线下皆有,线下计算距离。

六大核心功能 1.游戏陪练:可以选择当下火爆的游戏内容&#xff0c;选择游戏大神、职业玩家进行陪练&#xff0c;也可约附近路人玩家或是身边的小伙伴语音组队开黑&#xff0c;一起享受边玩游戏边吐槽的无限乐趣。 2.约玩交友:除了游戏陪玩功能&#xff0c;系统还设置了单独的语…

SpringBlade dict-biz/list SQL 注入漏洞复现

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

Python LEGB规则

Python在查找“名称”时&#xff0c;是按照LEGB规则查找的&#xff1a; Local&#xff1a; 指的就是函数或者类的方法内部 Enclosed&#xff1a; 指的是嵌套函数&#xff08;一个函数包裹另一个函数&#xff0c;闭包&#xff09; Global&#xff1a; 指的是模块中的全局变量 Bu…

含多种需求响应及电动汽车的微网/虚拟电厂日前优化调度

1 主要内容 程序主要建立一个微网/虚拟电厂的日前优化调度模型&#xff0c;以燃气轮机运行成本、购售电费用、电动汽车电池损耗成本以及需求响应费用之和为目标&#xff0c;在日前经济调度模型中&#xff0c;加入了电动汽车模型&#xff0c;考虑了电动汽车出行规律以及充放电规…

python之flask安装以及使用

1 flask介绍 Flask是一个非常小的Python Web框架&#xff0c;被称为微型框架&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&#xff0c;也意味着我们需要学习各种扩展库的使用。 2 python…

超越GPT-4V,苹果多模态大模型上新,神经网络形态加速MLLM(一)

4月8日&#xff0c;苹果发布了其最新的多模态大语言模型&#xff08;MLLM &#xff09;——Ferret-UI&#xff0c;能够更有效地理解和与屏幕信息进行交互&#xff0c;在所有基本UI任务上都超过了GPT-4V&#xff01; 苹果开发的多模态模型Ferret-UI增强了对屏幕的理解和交互&am…

【触想智能】如何选购到一款合适的工业电脑一体机

工业电脑一体机是专为工业环境而设计的一种工业计算机。工业电脑一体机和普通的计算机不一样&#xff0c;它对产品的参数性能要求很高&#xff0c;因为它们通常会运行在高低温、电磁干扰、高粉尘、湿度大的恶劣环境中&#xff0c;所以相应的要求工业电脑一体机必须具备良好的宽…

UE5下载与安装

官方网站&#xff1a;https://www.unrealengine.com/zh-CN 1、下载启动程序安装包。 登录官网后&#xff0c;点击首页右侧下载按钮下载Epic Games启动程序的安装包&#xff0c;如下图&#xff1a; 2、安装启动程序。 双击步骤1所下载安装软件&#xff0c;如下图&#xff1a;…

vivado AXI 接口事件

AXI 接口事件 在 Vivado 硬件管理器中 &#xff0c; 如果使用 System ILA IP 对设计 AXI 接口进行调试 &#xff0c; 那么“波形 (Waveform) ”窗口会显示对 应于 System ILA 所探测的接口的接口插槽、事件和信号组。正如下图所示 &#xff0c; “ Waveform ”窗口会显示…

中立分析腾讯云故障相关的事件

最近腾讯云的故障&#xff0c;让一堆云计算爱好者兴奋地远看指点江山、近看沐猴而冠。我比这群爱好者们更了解云计算&#xff0c;但是我尊重我的读者&#xff0c;你们从我这里看到的科普信息&#xff0c;不仅仅只有情绪价值。 在信息爆炸的时代&#xff0c;大家关注和信任某个媒…

三道模拟题

P1003 [NOIP2011 提高组] 铺地毯 题目描述 原题点这里-->P1003 [NOIP2011 提高组] 铺地毯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺…