zoukankan      html  css  js  c++  java
  • 微软面试100题之第3题

    求子数组的最大和(数组)
    题目:
    输入一个整形数组。数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每一个子数组都有一个和。
    求全部子数组的和的最大值。要求时间复杂度为O(n)。

    比如输入的数组为1, -2, 3, 10, -4, 7, 2, -5。和最大的子数组为3, 10, -4, 7, 2,
    因此输出为该子数组的和18。

    #include <stdio.h>
    
    int arraysum(int a[],int m,int n){
    	int i = m,sum = 0;
    	for(i;i<=n;i++){
    		sum+=a[i];
    	}
    	return sum;
    }
    
    int maxsubarray(int a[],int arraysize){
    	int left,right;	//标记子数组区间下标
    	int sum,max,i = 0,j = arraysize-1;
    	//init
    	left = i,right = j;
    	sum = arraysum(a,i,j);
    	max = sum;
    
    	while(i<j){
    		if(a[i] <= a[j]){
    			sum -= a[i];
    			if(max < sum){
    				max = sum;
    				left = i+1;
    				printf("max=%d,left=%d,right=%d
    ",max,left,right);
    			}
    			i++;
    		}
    		else{		
    			sum -= a[j];
    			if(max < sum){
    				max = sum;
    				right = j-1;
    				printf("max=%d,left=%d,right=%d
    ",max,left,right);
    			}
    			j--;
    		}
    	}	
    	return max;
    }
    
    main(){
    	int a[8] = {1,-2,3,10,-4,7,2,-5};
    	int max = maxsubarray(a,8);
    	printf("the maximum subarray is %d
    ",max);
    }





  • 相关阅读:
    Linux 中 /proc/meminfo 的含义
    Linux OOM-killer(内存不足时kill高内存进程的策略)
    java反射
    IDEA 创建Web项目
    centos7 源码安装php7
    linux 基本原则和常用命令
    ls file less
    centos7安装nginx1.10.1
    mysqlworkbench访问远程服务器
    redis 简单的注册
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6733005.html
Copyright © 2011-2022 走看看