题目1:删除排序数组中的重复数字
描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
样例
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
数据输入:整型数组。
数据输出:整型数据(最大利润)。
涉及的数据类型:整型数组,整型变量,for循环体。
解题思路:令max=0,在一个数组中,用后一个单元和前一个单元中的数据做差,如果大于0,则把所得数赋予max,并依次遍历,知道数组中任意两个前后值都做差,找出最大的数即可。
易错点(需要考虑的特殊情况):
1、若是差值小于0的话,为没有利润,利润值还是0。
2、不可超过数组最大值。
主要算法描述(伪代码):定义max初始为0,定义变量j,h为循环主体j初始为0,h初始为1,用for循环嵌套,让prices[0]和后面的每一个数比较做差,然后prices[1]再和其后面的比较做差……并不断比较,赋最大值给max,则最后得到的max就是最大值,。
public class Solution {
/**
* @param A: a array of integers
* @return : return an integer
*/
public int removeDuplicates(int[] nums) {
// write your code here
int n = nums.length;
int i,j=1;
if(n == 0)
return n;
for(i = 1; i < n; i++)
{
if(nums[i] != nums[j-1])
{
nums[j++] = nums[i];
}
}
return j;
}
}
题目2:买卖股票的最佳时机
描述:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。
样例
给出一个数组样例 [3,2,3,1,2], 返回 1
public class Solution {
/**
* @param prices: Given an integer array
* @return: Maximum profit
*/
public int maxProfit(int[] prices) {
// write your code here
int i=prices.length;
int maxprice=0,differ_price1=0,differ_price2=0;
int j=0,h=0;
if(i==2)
{
if(prices[1]-prices[0]>0)
return prices[1]-prices[0];
else
return 0;
}
for(j=0;j<i;j++)
{
for(h=j+1;h<i;h++)
{
if((prices[h]-prices[j])>maxprice)
maxprice=prices[h]-prices[j];
}
}
return maxprice;
}
}
题目3:爬楼梯
描述:假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?
样例
比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法
返回 3
public class Solution {
/**
* @param n: An integer
* @return: An integer
*/
public int climbStairs(int n) {
// write your code here
if (n <= 1) {
return 1;
}
int i = 1, i_ = 1;
int result = 0;
for (int j = 2; j <= n; j++) {
result = i + i_;
i_ = i;
i = result;
}
return result;
}
}