LeetCode算法题目(4)

131 阅读1分钟

7.买卖股票的最佳时机:

最优解:只需要遍历一次数组即可!时间复杂度为O(n),因为只使用了常数个变量,所以空间复杂度为O(1);

class Solution{
   public int maxProfit(int prices[]){
       int minprice = Integer.MAX_VALUE;
       int minprice = Integer.MAX_VALUE;
       for(int i = 0; i < prices.length; i++){
            if(prices[i] < minprice){
                minprice = prices[i];
            }else if(prices[i] - minprice > maxprofit){
              maxprofit = prices[i] - minprice;  
            }
       }
         return maxprofit;
   }
}

8.最长公共前缀:

方法之一:纵向扫描,从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀,时间复杂度为O(mn),其中m是字符串数组中的字符串的平均长度,n是字符串的数量,空间复杂度为O(1),使用的额外空间复杂度为常数

class Solution{
    public String longestCommonPrefix(String[] strs){
        if(strs == null || strs.length == 0){
          return "";  
        }
         int length = strs[0].length();        
         int count = strs.length;
          for(int i = 0; i < length; i++){
              char c = strs[0].charAt(i);
               for(int j = 1; j < count; j++){
                   if(i == strs[j].length() || strs[j].charAt(i) != c)
                        return strs[0].substring(0,i);
               }
          }
         return strs[0];
    }
}