首页 > 代码库 > 软件工程实验一

软件工程实验一

题目一: 删除排序数组中的重复数字

描述:

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]

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=0;
int m;
while(i<n-1)
{
if(nums[i]==nums[i+1])
{
for(m=i+1;m<n-1;m++)
nums[m]=nums[m+1];
n--;
}
else
{i=i+1;}
}
return n;
}

}

}

 

 

 

题目二:买卖股票的最佳时期

描述:假设有一个数组,它的第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

if(prices.length==0||prices==null)
{return 0;}

int a=0;
for(int i=0;i<prices.length;i++)
{
for(int m=i+1;m<prices.length;m++)
{
a=Math.max(a, prices[m]-prices[i]);

}
}
return a;
}
}

 

 

题目三:爬楼梯

描述:假设你正在爬楼梯,需要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==0)
{
return 1;
}
else{
int a[]=new int[n+1];
a[0]=1;
a[1]=1;
int i=2;
for( i=2;i<n+1;i++)
{
a[i]=a[i-2]+a[i-1];
}
return a[n];
}
}
}

软件工程实验一