将一组整数数组中的数字按负数在前,零在中间,正数在末尾摆放。
2014-10-30 00:43
357 查看
将一组整数中的数字按负数在前,零在中间,正数在末尾摆放。
美团电话面试程序题:
第一次循环将负数排到前面,第二次循环将0排到负数后面,时间复杂度O(p)+ O(n-p)=O(N),空间复杂度O(1)
美团电话面试程序题:
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ /* *将一组整数排成负数,0,整数 */ void swap(int *x,int *y){ int temp=*x; *x=*y; *y=temp; } void print(int a[],int n){ int i; for(i=0;i<n;i++){ printf("%d , ",a[i]); } } int main(int argc, char *argv[]) { /* printf("输入整数的个数"); int n; int *a; scanf("%d\n",&n); printf("输入%d个整数",n); for(int i=0;i<n;i++){ scanf("%d",*(a+i)); } */ int i; int a[18]={0,3,6,4,-1,0,-2,0,4,7,-3,6,0,1,-4,1,0,0}; int *p,*q,*r,*k; p=a;q=p+18-1; while(p<q){ if(*p<0){ p++; }else{ if(*q>=0){ q--; }else if(*q<0){ swap(p,q); q--; } } } print(a,18); k=p; r=a+17; while(k<r){ if(*k>0){ if(*r==0){ swap(k,r); k++; }else{ r--; } }else{ k++; } } print(a,18); getchar(); return 0; }
第一次循环将负数排到前面,第二次循环将0排到负数后面,时间复杂度O(p)+ O(n-p)=O(N),空间复杂度O(1)
相关文章推荐
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 输入整形数组,数组里有正数也有负数,数组中一个或连续的多个整数组成数组的子数组,求所有子数组中和的最大值 ,例如输入的数组为{1,-2,3,10,-4,7,2,-5}和最大的子数组为{3,10,
- 将所给数组中的负数安排在左边,零安排在中间,正数安排在右边
- 黑马程序员之C#编程基础学习笔记:将一个整数数组的每一个元素进行如下的处理:如果元素是正数则将这个位置的元素的值加1,如果元素是负数则将这个位置的元素减1。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
- 【C语言】输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
- 某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- js 只能输入数字(正整数,正数,负数,小数)
- 编一个程序,输入10个整数,并放在数组中,先降序输出全部的数,再统计并输出当中正数、负数和零的个数
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
- 编一个程序,输入10个整数,并放在数组中,先降序输出所有的数,再统计并输出其中正数、负数和零的个数