题目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"。