详解三种C#实现数组反转方式

今天上班中午吃饱之后、逛博客溜达看到一道题:数组反转  晚上回家洗完澡没事情做,就自己练习一把。

public static class ArrayReserve
  {
    /// <summary>
    /// 使用 Array.Reverse(Arrar) 反转全部
    /// </summary>
    /// <param name="arr"></param>
    public static void ReverseDemo1(int[] arr)
    {
      Console.WriteLine("使用 Array.Reverse(Arrar) 反转全部");
      Array.Reverse(arr);
    }
    /// <summary>
    /// 使用 Array.Reverse(Array arr,int begin,int end),反转指定部分
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="begin"></param>
    /// <param name="end"></param>
    public static void ReverseDemo2(int[] arr, int begin, int end)
    {
      Console.WriteLine("使用 Array.Reverse(Array arr,int begin,int end),反转指定部分");
      Array.Reverse(arr, begin, end);
    }
    /// <summary>
    /// 使用自定义方法实现反转
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="begin"></param>
    /// <param name="end"></param>
    public static void ReverseDemo3(int[] arr, int begin, int end)
    {
      Console.WriteLine("使用自定义方法实现反转");
      if(null==arr)
      {
        throw new ArgumentNullException("arr", "Array不能为null");
      }
      if(begin<=0 || end <=0)
      {
        throw new ArgumentOutOfRangeException("开始或结束索引没有正确设置");
      }
      if(end>arr.Length)
      {
        throw new ArgumentOutOfRangeException("end", "结束索引超出数组长度");
      }
      while(begin<end)
      {
        int temp = arr[end];
        arr[end] = arr[begin];
        arr[begin] = temp;
        begin++;
        end--;
      }
    }
  /// <summary>
    /// 使用自定义方法实现反转(使用栈《后进先出》)
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="begin"></param>
    /// <param name="end"></param>
    public static void ReverseDemo4(int[] arr, int begin, int end)
    {
      Console.WriteLine("使用自定义方法实现反转(使用栈《后进先出》)");
      if (null == arr)
      {
        throw new ArgumentNullException("arr", "Array不能为null");
      }
      if (begin <= 0 || end <= 0)
      {
        throw new ArgumentOutOfRangeException("开始或结束索引没有正确设置");
      }
      if (end > arr.Length)
      {
        throw new ArgumentOutOfRangeException("end", "结束索引超出数组长度");
      }
      Stack<int> intStack = new Stack<int>();
      int tempBegin = begin;
      for(;begin<=end;begin++)
      {
        intStack.Push(arr[begin]);
      }
      for (; tempBegin <= end; tempBegin++)
      {
        arr[tempBegin] = intStack.Pop();
      }
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#中数组初始化、反转和排序用法实例

    本文实例讲述了C#中数组初始化.反转和排序用法.分享给大家供大家参考.具体如下: 下面的代码演示了在C#中定义和初始化数组,然后对其进行赋值,排序和反转的操作方法: using System; public class ArraySample { public static void Main() { // Create and initialize a new array instance. Array strArr = Array.CreateInstance(typeof(string),

  • C#使用自定义算法对数组进行反转操作的方法

    本文实例讲述了C#使用自定义算法对数组进行反转操作的方法.分享给大家供大家参考.具体如下: C#的Array对象自带反转功能,但是下面的代码完全通过自定义的算法来实现数组反转 复制代码 代码如下: public static void ReverseArray<T>(this T[] inputArray) {   T temp = default(T);   if (inputArray == null)     throw new ArgumentNullException("i

  • C#数组反转与排序实例分析

    本文实例分析了C#数组反转与排序的方法.分享给大家供大家参考.具体实现方法如下: C#数组反转 复制代码 代码如下: using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace 数据反转  {      class Program      {          static void Main(string[] args)          {    

  • 详解三种C#实现数组反转方式

    今天上班中午吃饱之后.逛博客溜达看到一道题:数组反转  晚上回家洗完澡没事情做,就自己练习一把. public static class ArrayReserve { /// <summary> /// 使用 Array.Reverse(Arrar) 反转全部 /// </summary> /// <param name="arr"></param> public static void ReverseDemo1(int[] arr) {

  • 详解三种java实现多线程的方式

    java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 public class thread1 extends Thread { public void run() { for (int i = 0; i < 10000; i++) { System.out.println("我是线程"+this.getId()); } } public static void main(String[] args) {

  • 第七篇Bootstrap表单布局实例代码详解(三种表单布局)

    Bootstrap提供了三种表单布局:垂直表单,内联表单和水平表单.下面逐一给大家介绍,有兴趣的朋友一起学习吧. 创建垂直或基本表单: •·向父 <form> 元素添加 role="form". •·把标签和控件放在一个带有 class .form-group 的 <div> 中.这是获取最佳间距所必需的. •·向所有的文本元素 <input>.<textarea> 和 <select> 添加 class .form-cont

  • 详解三种方式在React中解决绑定this的作用域问题并传参

    在React中时常会遇到this指向的作用域问题 从而导致undefined报错 先来个Demo: 功能很简单 点击按钮改变文字 import React from 'react'; export default class BindWithThis extends React.Component { constructor(props) { super(props); this.state = { msg:"BindWithThis" } } render() { return &l

  • Spring Boot详解五种实现跨域的方式

    目录 一.为什么会出现跨域问题 二.什么是跨域 三.非同源限制 四.java后端实现CORS跨域请求的方式 1. 返回新的CorsFilter(全局跨域) 2. 重写WebMvcConfigurer(全局跨域) 3. 使用注解 (局部跨域) 4. 手动设置响应头(局部跨域) 5. 使用自定义filter实现跨域 一.为什么会出现跨域问题 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能

  • 详解三种方式解决vue中v-html元素中标签样式

    Vue为v-html中标签添加CSS样式 <template> <div class="hello"> <section> <h2 class="title">{{news.title}}</h2> <p class="news-time">{{news.datetime}}</p> <div class="con" v-html=&qu

  • mysql 5.7.20解压版安装方法步骤详解(两种方法)

    我来讲解下window64位下MySQL的安装,MySQL是在5.7开始安装版就只有32位下载服务了,这里我讲解解压版的MySQL如何安装,在安装MySQL解压版时对于新手的小编来说也是头疼得很,各种问题各种来没有安装版的一键轻松搞定的方便,安装时需要注意三点:1.路径配置,2.安装时MySQL端口被占用这时需要关闭被占用端口,3.cmd必须是在管理员环境下设置MySQL信息. MySQL官网: https://www.mysql.com/downloads/ http://www.jb51.n

  • IOS中Json解析实例方法详解(四种方法)

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的iOS版本,可以使用第三方库来解析Json. 本文将介绍Tou

  • 详解三分钟快速搭建分布式高可用的Redis集群

    这里的Redis集群指的是Redis Cluster,它是Redis在3.0版本正式推出的专用集群方案,有效地解决了Redis分布式方面的需求.当单机内存.并发.流量等遇到瓶颈的时候,可以采用这种Redis Cluster方案进行解决. 分区规则 Redis Cluster采用虚拟槽(slot)进行数据分区,即使用分散度良好的哈希函数把所有键映射到一个固定范围的整数集合里,这里的整数就是槽(slot).Redis Cluster槽的范围是0~16383,计算公式:slot=CRC16(key)

  • 详解python如何通过numpy数组处理图像

    如图,以该猫咪图片为例(忽略水印).将该文件命名为cat.jpg,并对其展开以下操作. 使用PIL库进行灰度处理 from PIL import Image import numpy as np # 读取图像,并转化为数组 im = np.array(Image.open("cat.jpg")) # 灰度处理公式 gray_narry = np.array([0.299, 0.587, 0.114]) x = np.dot(im, gray_narry) # 数组转图片 gray_ca

随机推荐