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算法来实现…
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章