数组题目:求更优解~~~

原创 2012年03月21日 06:55:14
给定一个N个元素的整数,元素分别为A1,A2,A3....AN,将数组变为A1<A2>A3<A4......的锯齿状数组,时间复杂度

 

解:刚刚开始我的想法是,需要把它们先排序,如:1 2 3 4 5 67...然后在进行处理,原理是:首尾保持不变,从第二位和倒数第二位开始交换,然后index(下标)每隔2处理( 即lowIndex += 2;highIndex -= 2),结束条件就是 lowIndex>=highIndex;这样其实是可以的,但是大家知道在排序上就有点浪费时间了,后来想了一下没有必要排序的呀,只要保证以中位数为分界点,左边小于分界数,右边大于分界数就可以了,O(∩_∩)O~,那么代码就easy了~

 

>>>当然要解决此问题的办法就是首先我们需要转化成这样一个数组:中位数左边的都比它小,右边的都比他大,那么其实我们自己是可以写这个函数的,但是现在STL 中已经有了这样一个函数:STL样本 nth_element 函数!不会的自己看看去呗~O(∩_∩)O~,其实我们只要调用:nth_element( a, a + mid, a +allsize )就是可以做到的~ 呵呵,而且 STL 的库函数是有优化的哦,所以还是使用 STL的比较好,函数时间复杂度是O( n ),

主代码:( 仅供参考,人懒没有调试~O(∩_∩)O~ )(注意:这个参考代码摘自CSDN,非本人写 

int main()

{

    int a[] ={ 1, 5, 3, 7, 4, 2, 6 }; 
    intb[100]; 
    int size =sizeof( a ) / sizeof( a[0] ); 
    int mid =size / 2; 
    nth_element(a, a + mid, a + size );  
    int index1,index2, index3 = 0; 
    for( index1= 0, index2 = mid + 1; index1 < mid; index1++,index2++ ) //! 这个算法还是很灵活的 
   
    b[index3++] = a[index1]; 
    if( index2 < size ) 

    
         b[index3++] = a[index2]; 

    }
   
    b[index3] =a[mid]; 
   
    for( i1 = 0;i1 < size; ++i1 ) 
   
       cout << b[i1]<< " "; 
   

    return0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计难题:领导的方案和我的方案哪种更优?

[环境]  有多台高性能数据库服务器组成一个中央服务器集群,提供核心共享数据库,可以认为中央服务器是绝对安全的.另外有若干台数据库服务器供业务访问.    [业务流程介绍]  办理某业务时需要...

哪种Map遍历方法更优?!—Map遍历方法的正确选择

我们都知道遍历Map一般有3种方法,values(),keySet()和entrySet(),常见的是keySet用的多,简单容易理解,entrySet()是返回Map中的静态内部类Entry类类型的...

Android系统下解决音频underrun噪声问题的一种更优方法

【问题概要】     上一次我介绍了一种 Android 系统下发生音频 underrun 问题的解决方法(参见《记一次Android系统下解决音频UnderRun问题的过程》),这之后平静了一段时间...

三元运算符性能更优

1. 概述 以前在学习语言的时候,常常有人说如果能用三元运算符x=y>0?A:B;,其性能会比使用if...else...性能更好,后来了解了CPU的运行原理后,才明白其中的原因。 2.原理2.1 C...

Google严苛模式【调试、优化、检查】让你的APP更优,突破优化瓶颈

1.什么是严苛模式(StrictMode) StrictMode是一个开发工具,检测到你可能的事情 偶然做的就让你的注意力,这样你就可以修复 他们。 StrictMode是最常用的磁盘或...

微软100题-求连续子数组之和的最大值+题目变形

求连续子数组之和的最大值:这个题很早前我就研究过了,百度实习面试的时候问了我一道类似的题目,就是给定两个数组和一个数,在两个数组中各取一个数,使其和为输入的值,也是该题目的一种变形,我上来就给出了一个...

2014年阿里巴巴笔试题目(28题):最小三元数组距离最优算法

题目描述:三个升序整形数组 采用java语言实现,三个数组分别为a,b,c。思想是这样的,每个数组维护一个索引,索引分别为ap,bp和cp,初始化索引均指向数组开头的0位置。距离最小值记为min,主...

数组的练习题目

树状数组题目集

  • 2013-06-11 10:24
  • 143KB
  • 下载

程序员面试题目总结--数组(一)【递归求数组所有元素和、用一个for循环打印出一个二维数组、用递归判断数组是否是递增、有序数组中删除重复元素】

1、给定一个含有n个元素的整型数组a,求a
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)