find 3 indexes

来源:互联网 发布:电子琴教学视频软件 编辑:程序博客网 时间:2024/05/06 03:27

陈利人老师的新浪微博面试题

/*===============================================================** Author: lizhao(clark)** E-mail: lzclark27@gmail.com** company: ** Last modified: 2013-03-28 10:30** Filename: findThreeSequence.c** Description: http://weibo.com/1915548291/zpuaLlfh5#_rnd1364437842264*===============================================================*/#include <stdio.h>struct myresult{int n[3];};int find3Sequence(int a[], int n, struct myresult *res){if(!a || n<3 || !res)return -1;int i, nMax=-1;for(i=0;i<sizeof(struct myresult)/sizeof(int);++i)res->n[i] = -1;res->n[2] = n-1;for(i=n-2;i>=0;--i){if(a[i] < a[res->n[2] ]){if(-1 == res->n[1]){res->n[1] = i;}else if(a[i] > a[ res->n[1] ]){//replace the second numberres->n[1] = i;}else{res->n[0] = i;return 0;}}else{if(-1 == res->n[1]){res->n[0] = i;}else if(-1==nMax){nMax = i;}else if(a[i] > a[nMax]){nMax = i;}else{res->n[2] = nMax;res->n[1] = i;}}}}int main(int argc, char **argv){int i;struct myresult res;//int array1[] = {1, 4, 2, 3};int array1[] = {6, 7, 8, 9, 3, 4, 5};if(find3Sequence(array1, sizeof(array1)/sizeof(int), &res) == 0){printf("find array1:");for(i=0;i<sizeof(res)/sizeof(int);++i)printf("a[%d]=%d\n", res.n[i], array1[ res.n[i] ]);}elseprintf("not find!\n");return 0;}
原创粉丝点击