实现数组元素倒序的算法,写出两种实现,时间复杂度为O(n)和O(n/2)
来源:互联网 发布:docker golang 镜像 编辑:程序博客网 时间:2024/04/30 13:53
一次在中友集团中的笔试题:实现数组元素倒序的算法,写出两种实现,时间复杂度为O(n)和O(n/2)。以下为我的实现,如下所示:
package algorithm;import java.util.Arrays;import java.util.Collections;import java.util.List;/** * @author RockeyLu 中友的倒序算法题,不能直接用集合的倒序方法<br> * 至少两种实现方式<br> * 一:时间复杂度为O(n)<br> * 二:时间复杂度为O(n/2) * */public class ReverseAlgo {public static void main(String[] args) {// 偶数个元素// String[] arrays = { "k", "b", "i", "s", "o", "n" };// 奇数个元素String[] arrays = { "R", "o", "c", "k", "e", "y", "L" };System.out.println("原来的数组:" + Arrays.asList(arrays));System.out.println("倒序,时间复杂度O(n):" + Arrays.asList(reverse1(arrays)));System.out.println("倒序,时间复杂度O(n/2):" + Arrays.asList(reverse2(arrays)));List<String> temp = Arrays.asList(arrays);Collections.reverse(temp);System.out.println("倒序,集合的倒序方法:" + temp);}/** * 从尾到头遍历,然后赋值给一个新的数组<br> * 时间复杂度为O(n) * * @param arrays * @return */public static String[] reverse1(String[] arrays) {if (arrays == null || arrays.length == 0) {return null;}String[] reverseArray = new String[arrays.length];for (int i = arrays.length - 1, j = 0; i >= 0; i--, j++) {reverseArray[j] = arrays[i];}return reverseArray;}/** * 数组的头尾元素对调,直到中间<br> * 时间复杂度为O(n/2) * * @param arrays * @return */public static String[] reverse2(String[] arrays) {if (arrays == null || arrays.length == 0) {return null;}int i = 0, j = arrays.length - 1;while ((i < arrays.length / 2) && (j >= arrays.length / 2)) {swap(arrays, i, j);i++;j--;}return arrays;}/** * 交换数组中的两个元素 * * @param arrays * @param i * @param j */private static void swap(String[] arrays, int i, int j) {String temp = arrays[i];arrays[i] = arrays[j];arrays[j] = temp;}}
- 实现数组元素倒序的算法,写出两种实现,时间复杂度为O(n)和O(n/2)
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- 【算法数据结构Java实现】时间复杂度为O(n)的最大和序列
- 实现排序算法,时间复杂度为O(n)
- LeetCode 135. Candy (O(n)时间 O(n)和O(1)空间的两种实现)
- (C#)实现时间复杂度为O(n)空间复杂度为O(1)的数组中奇偶数分离
- 已知数组A[1...n] ,确定第K小元素 算法的时间复杂度O(n)
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- 基于堆栈的时间复杂度为O(n)的箱子排序算法实现
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 时间复杂度为O(n)的排序算法--计数算法
- 在时间复杂度O(n)内,实现将数组A[n]中所有元素左循环移n位
- 有1,2,....一直到n的无序数组,求排序算法,要求时间复杂度为O(n),空间复杂度O(1)
- 有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),一次只能交换两个数
- 有1,2,....一直到n的无序数组,求排序算法,要求时间复杂度为O(n),空间复杂度O(1)
- HDU1257--最少拦截系统 (LIS时间复杂度O(n^2)与O(nlogn)两种算法)
- 求一个数组的中位数时间复杂度为O(n)
- 微软企业库异常处理-CustomHandler
- Android系统移植(一)-让android系统在目标平台上运行起来
- I2C操作
- 第九周任务一
- Activity的四种启动模式
- 实现数组元素倒序的算法,写出两种实现,时间复杂度为O(n)和O(n/2)
- Mocking static methods (PowerMock )
- Android系统移植(二)-按键移植
- c++模板类/模板函数的声明与定义应该放在头文件里
- 第九周任务二:CTime类的扩展
- I2C总线协议
- CCNA题库V108.8第41题图解
- Android系统移植(三)-按键字符表
- 连接数据库后乱码的解决方法