实验一

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

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

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

样例

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

 1 class Solution {
 2     public :
 3     /**
 4      * @param A: a list of integers
 5      * @return : return an integer
 6      */
 7  int removeDuplicates(vector <int>&nums) {
 8         // write your code here
 9 using namespace std;
10      int j=1;
11     int i;
12     int leng=nums.length;
13     if(leng==0)
14         return 0;
15     else if(leng==1)
16         return 1;
17     else
18     {
19     for(i=0;i<leng;i++)
20     {
21         if(nums[i]!=nums[j-1])
22         {
23             nums[j++]=nums[i];
24         }
25     }
26     return 0;
27 }
28 }

  

题目2:买卖股票的最佳时机

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

样例

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

 1 public class Solution {
 2     /**
 3      * @param n: An integer
 4      * @return: An integer
 5      */
 6     public int climbStairs(int n) {
 7         // write your code here
 8     if(n==0)
 9         return 1;
10         int []s=new int[n+1];
11         s[0]=1;
12         s[1]=1;
13         for(int i = 2;i<=n;i++)
14         {
15             s[i]=s[i-2]+s[i-1];
16         }
17         return s[n];
18     }
19 };

题目3:爬楼梯

描述:假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

样例

比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法

返回 3

 1 public class Solution {
 2     /**
 3      * @param n: An integer
 4      * @return: An integer
 5      */
 6     public int climbStairs(int n) {
 7         // write your code here
 8     if(n==0)
 9         return 1;
10         int []s=new int[n+1];
11         s[0]=1;
12         s[1]=1;
13         for(int i = 2;i<=n;i++)
14         {
15             s[i]=s[i-2]+s[i-1];
16         }
17         return s[n];
18     }
19 };

 

附加题:

题目:最长回文子串

描述:给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。(注:“回文串”是一个正读和反读都一样的字符串)

样例

给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"。

原文地址:https://www.cnblogs.com/erdai/p/6512291.html