zoukankan      html  css  js  c++  java
  • 求两个数组的交集+最长公共前缀

    求两个数组的交集-lc350

    解:两个指针比较是否相等即可

    class Solution {
    public:
       vector<int> intersect(vector<int>& nums1, vector<int>& nums2)
      {
           map<int,int> mp;
           vector<int> ans;
           for(auto i:nums1)
             mp[i]+=1;
     
           for(auto j:nums2)
          {
               if(mp[j]>0){
               mp[j]-=1;
               ans.push_back(j);
              }
          }
          return ans;
      }
    };

    如果给定数组已经排好序,优化版;

    1,设定两个指针,比较两个指针指向元素,相同元素放进空白数组

    2;不同元素,将指针指向小的元素后移

    3,重复以上步骤,知道任意一个数组终止

    class Solution {
    public:
       vector<int> intersect(vector<int>& nums1, vector<int>& nums2)
      {
        int i=0,j=0,k;
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        vector<int> ans;
        while(i<nums1.size() && j<nums2.size() )
        {
            if(nums1[i]>nums2[j])
             j++;
            else if(nums1[i]<nums2[j])
              i++;
            else
            {
                ans.push_back(nums2[j]);
                i++;
                j++;
            }
        }
        return ans;
      }
    };

    ...一定要初始化......

    遍历过后的数组没用,可以用来储存答案,节省内存和空间;

    第二种比第一种内存小;

     

    最长公共前缀-lc14

    找字符串数组中的最长公共前缀;

    解:将第一个元素作为基准元素,依次将基准元素与后边的每个元素相比较,不断更新基准元素,直到基准元素和所有元素都满足公共前缀

    如果基准元素和任意一个元素无法匹配,不存在公共前缀,直接退出。

    特判一下数组为空的情况。

    compare(X0,x);(X0为基准元素,x为比较元素);

    如果conpare(x0,x)==0,截取掉x0的最后一个元素,依次比较直到得出结果

    比如flight和flow

    flight ----flow 去掉t,h,g,i之后,前缀为fl

    代码:

    class Solution {
       public String longestCommonPrefix(String[] strs) {
           if(strs.length<1)
            return "";
           int idx=0;
           for(int i=0; i<strs[0].length(); i++)
          {
               char cur=strs[0].charAt(i);//charAt返回指定索引时的值

               for(String str :strs)
              {
                   if(str.length()==i||cur!=str.charAt(i))
                    return str.substring(0,idx);
              }
               idx++;
          }
           return strs[0].substring(0,idx);

      }
    }
    class Solution{
    public String longestCommonPrefix(String[] strs) {
           if (strs.length == 0) return "";
           String prefix = strs[0];
           for (int i = 1; i < strs.length; i++)
               while (strs[i].indexOf(prefix) != 0)
              {//Java的indexof函数直接在一个字符串中找另一个字符串
                   prefix = prefix.substring(0, prefix.length() - 1);
                   if (prefix.isEmpty()) return "";
              }        
           return prefix;

      }
    }

    第二中用时较短,内存消耗和第一种相同;分治应该也可以吧....

  • 相关阅读:
    超过5名学生的课
    大的国家
    shell启动时读取的配置文件
    shell中的环境变量
    chisel中pviews命令无法使用
    shell script中的$*和$@
    OS X EI Capitan 10.11.4中sudo无法起作用的解决方法
    如何判断CPU的位数
    block中无法使用C数组变量
    布尔代数
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/13414234.html
Copyright © 2011-2022 走看看