zoukankan      html  css  js  c++  java
  • Leetcode::Longest Common Prefix && Search for a Range

    一次总结两道题,两道题目都比较基础

    Description:Write a function to find the longest common prefix string amongst an array of strings.

    分析: 这道题目最重要的知道什么叫prefix前缀, 否则一不小心就做成了最长子序列。前缀就是两个序列的前多少位

    都要是一样的,不能跳着对齐,这样就比较简单了,也可以求很多个序列的公共前缀。

     1 class Solution {
     2 public:
     3     string longestCommonPrefix(vector<string> &strs) {
     4         string result,comm;
     5         if(strs.empty()) return result;
     6         result= strs[0];
     7         for(int i=1;i<strs.size();i++)
     8         {
     9             comm = "";
    10             for(int j=0;j<result.size();j++)
    11             {
    12                 if(j>=strs[i].size()) break;
    13                 if(result[j]==strs[i][j]) comm.insert(comm.end(),result[j]);
    14                 else break;
    15             }
    16             result = comm;
    17         }
    18         
    19         return result;
    20     }
    21 };

    题目二:Search for a range

    Description: Given a sorted array of integers, find the starting and ending position of a given target value.

    Your algorithm's runtime complexity must be in the order of O(log n).

    If the target is not found in the array, return [-1, -1].

    For example,
    Given [5, 7, 7, 8, 8, 10] and target value 8,
    return [3, 4].

    分析: 要找一个排序数组的某个元素的范围,要求复杂度是O(log n),则肯定是基于二分查找。因为有重复元素,则将二分查找

    的边界条件变一下就可以了。

     1 class Solution {
     2 public:
     3     vector<int> searchRange(int A[], int n, int target) {
     4         vector<int> pos (2,-1) ;
     5         if(n<=0) return pos;
     6         //left bound
     7         int start=0,stop = n-1,mid;
     8         while(start<=stop)
     9         {
    10             mid = (start+stop)/2;
    11             if(A[mid]==target && (mid==0 || A[mid-1]<target))
    12             {
    13                 pos[0] = mid;
    14                 break;
    15             }
    16             else if(A[mid]<target)
    17                  {
    18                      start = mid+1;
    19                  }
    20                  else{
    21                      stop = mid-1;
    22                  }
    23         }
    24         if(pos[0]==-1) return pos;
    25         //right bound
    26         start=0,stop = n-1;
    27         while(start<=stop)
    28         {
    29             mid = (start+stop)/2;   
    30             if(A[mid]==target && (mid==n-1 || A[mid+1]>target) )
    31             {
    32                 pos[1] = mid;
    33                 break;
    34             }
    35             else if(A[mid]>target)
    36                  {
    37                      stop = mid-1;
    38                  }
    39                  else{
    40                      start = mid+1;
    41                  }
    42         }
    43         return pos;
    44     }
    45 };
  • 相关阅读:
    阿里代码检查工具
    SpringCloud 服务通信方法
    Apache ab简单使用
    H5 webSocket使用
    Java list去重 取重
    解决 spring boot Failed to decode downloaded font
    Pycharm设置快捷方式
    环境变量与文件的查找
    Linux基础
    VIM中文乱码解决
  • 原文地址:https://www.cnblogs.com/soyscut/p/3776985.html
Copyright © 2011-2022 走看看