数据结构与算法——数组

本文介绍了两种数组操作算法:一种是通过多次移动实现数组旋转;另一种是通过三次反转实现数组的部分反转,使得数组在反转后仍保持局部有序。文章提供了详细的代码实现。

旋转数组

转自 http://blog.youkuaiyun.com/booirror/article/details/43950477

  1. void rotate(int nums[], int n, int k) {  
  2.     int temp;  
  3.     for (int step = 0; step < k; step++) {  
  4.         temp = nums[n-1];  
  5.         for (int i = n-1; i > 0; --i)  
  6.         {  
  7.             nums[i] = nums[i-1];  
  8.         }  
  9.         nums[0] = temp;  
  10.     }  

2 三次翻转法

转自  http://blog.youkuaiyun.com/a1b2c3d4123456/article/details/51536086

题目要求部分反转数组。比如说1,2,3,4,5 翻转后是3,4,5,1,2
即原来有序,反转后2部分各自有序。

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> arrayTest;
<span class="hljs-javadoc">/**
 * 数组部分反转,使用的是三次反转
 *<span class="hljs-javadoctag"> @author</span> duola
 *
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">reverse</span> {</span>

    <span class="hljs-comment">//从指定位置开始反转</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">reverse</span>(<span class="hljs-keyword">int</span> [] arr,<span class="hljs-keyword">int</span> from,<span class="hljs-keyword">int</span> to) {
            <span class="hljs-keyword">while</span>(from<to){
                <span class="hljs-keyword">int</span> tmp=arr[from];
                arr[from++]=arr[to];
                arr[to--]=tmp;
            }
    }


    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String [] args) {
        <span class="hljs-keyword">int</span>[] test={<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>};
        reverse(test, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>);
        reverse(test, <span class="hljs-number">2</span>, test.length-<span class="hljs-number">1</span>);
        reverse(test, <span class="hljs-number">0</span>, test.length-<span class="hljs-number">1</span>);
        <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<test.length;i++){
            System.out.print(test[i]);
        }   
    }

}



</code>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值