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 数组的主要内容,如果未能解决你的问题,请参考以下文章