2015年9月8日星期二

Remove Element

Problem:
Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the new length.

Analysis:
It's simple, just replace the give value with the last item in the array. 

2015年7月9日星期四

Search in Rotated Sorted Array

好无聊啊,只有刷题玩玩,让大脑充实一些。有时候刷题不要死脑经去搞懂最基本的东西,能用就行。其实这道题的核心就是找target, 如果target不在搜索区间内就换。


 public class SearchinRotatedSortedArray {  
   public static int search(int A[], int n, int target)  
   {  
     int first=0;  
     int last=n;  
     int mid=0;  
     while(first!=last)  
     {  
       mid=(first+last)/2;  
       if(A[mid]==target)  
         return mid;  
       if(A[first]<=A[mid])  
       {  
         if(A[first]<=target && target<A[mid])  
           last=mid;  
         else  
           first=mid+1;  
       }  
       else  
         if(A[mid]<target && target<=A[last-1])  
           first=mid+1;  
         else  
           last=mid;  
     }  
     return -1;  
   }  
 }  

2015年5月7日星期四

Compare Version Numbers

Problem:

Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37

Analysis:

Use string.split method. Split the string into two arrays by '.'.

Solution:


1:  public static int CompareVersion(string version1, string version2)  
2:      {  
3:        string[] v1 = version1.Split('.');  
4:        string[] v2 = version2.Split('.');  
5:        int longest = v1.Length > v2.Length ? v1.Length : v2.Length;  
6:        for(int i=0;i<longest;i++)  
7:        {  
8:          int ver1 = i < v1.Length ? int.Parse(v1[i]) : 0;  
9:          int ver2 = i < v2.Length ? int.Parse(v2[i]) : 0;  
10:          if (ver1 > ver2) return 1;  
11:          if (ver1 < ver2) return -1;  
12:        }  
13:        return 0;  
14:      }