LintCode 数组

Posted Hesier

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode 数组相关的知识,希望对你有一定的参考价值。

 加一

 删除元素

 买卖股票的最佳时机

加一

给定一个非负数,表示一个数字数组,在该数的基础上+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 数组的主要内容,如果未能解决你的问题,请参考以下文章

lintcode50 数组剔除元素后的乘积

lintcode 主元素解决方法

lintcode-寻找旋转排序数组中的最小值 java 需复习

LintCode之主元素

LintCode 50. 数组剔除元素后的乘积

lintcode:排颜色 II