码迷,mamicode.com
首页 > 编程语言 > 详细

LintCode 数组(一)

时间:2016-07-02 00:21:27      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:

 加一

 删除元素

 买卖股票的最佳时机

加一

给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。

样例:给定 [1,2,3] 表示 123, 返回 [1,2,4].  给定 [9,9,9] 表示 999, 返回 [1,0,0,0].

public int[] plusOne(int[] digits) {
    int carries = 1;
    for(int i=digits.length-1; i>=0 && carries>0; i--){
        int sum = digits[i] + carries;
        digits[i] = sum % 10;
        carries = sum/10;
    }
    
    if(carries==0){
        return digits;
    }
    int[] rst = new int[digits.length+1];
    rst[0] = 1;
    for(int j=0; j<digits.length; j++){
        rst[j+1] = digits[j];
    }
    return rst;
}

 

删除元素

 给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

解答:用左右两个指针,left的值为val时,把right赋给left,right--

public int removeElement(int[] nums, int val) {
    int left = 0;
    int right = nums.length-1;
    while(left<=right){
        if(nums[left]==val){
            nums[left] = nums[right];
            right--;
        }else{
            left++;
        }
    }
    return right+1;
}

 

 

买卖股票的最佳时机

 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。

样例:给出一个数组样例 [3,2,3,1,2], 返回 1 

解答:遍历数组,每次都更新最大利润和最小值。

public int maxProfit(int[] prices) {
    if(prices==null || prices.length==0){
        return 0;
    }
    int min = prices[0];
    int maxpro = 0; 
    for(int i=1; i<prices.length; i++){
        maxpro = Math.max(maxpro, prices[i]-min);
        min = Math.min(min, prices[i]);
    }
    return maxpro;
}

 

LintCode 数组(一)

标签:

原文地址:http://www.cnblogs.com/hesier/p/5634427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!