Leetcode刷題之路(21-30)

26.刪除排序數組中的重複項

刪除排序數組中的重複項題目鏈接

  • 首先這道題要求你不能用多餘空間,只讓你用這個數組nums來實現,那麼第一反應就是遇到重複的就去移動,但是仔細想想這種思路挺複雜的,效率也不高。
  • 我們可以反向思考一下,從數組頭開始遍歷,用一個指針記錄當前第一個數,遇到不等於當前指針數的就數組頭開始覆蓋,然後更新這個指針數,這樣只需要遍歷一次答案就出來了
public int removeDuplicates(int[] nums) {
         if(nums==null||nums.length==0){
               return 0;
           }
           int len = 1;
           int num = nums[0];
           for(int i=1;i<nums.length;i++){
                if(num!=nums[i]){
                    nums[len++]=nums[i];
                      num=nums[i];
                }
           }
           return len;
    }

27.移除元素

移除元素題目鏈接

  • 和上面題要求一樣,要求你不能用多餘空間,只讓你用這個數組nums來實現,那麼第一反應就是遇到重複的就去移動,但是仔細想想這種思路挺複雜的,效率也不高
  • 我們可以反向思考一下,從數組頭開始遍歷,遇到不等於給定數的就從頭覆蓋,這樣只需要遍歷一次答案就出來了,相比上道題少了一個讓你更新指針的操作
public int removeElement(int[] nums, int val) {
           if(nums==null||nums.length==0){
                return 0;
            }
            int len = 0;
            for(int i=0;i<nums.length;i++){
                 if(nums[i]!=val){
                     nums[len++]=nums[i];
                 }
            }
            return len;
    }

28.實現strStr

實現strStr題目鏈接

  • 方法一:首先我們可以循環haystack,遇到當前字符和needle第一個字符相同再去截取同樣長度的haystack比較
public int strStr(String haystack, String needle) {
            if(haystack==null&&needle!=null){
                 return -1;
             }
             if(needle==null||needle.length()==0){
                 return 0;
             }
             int len = -1;
             for(int i=0;i<=haystack.length()-needle.length();i++){
                 if(haystack.charAt(i)==needle.charAt(0)){
                     String str = haystack.substring(i,i+needle.length());
                     if(str.equals(needle)) {
                         len = i;
                         break;
                     }
                 }
             }
             return len;
    }
  • 方法二:同樣的可以用KMP算法來實現…
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章