刷题第二天

26. 删除有序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

 

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

 

将最终结果插入 nums 的前 k 个位置后返回 k

 

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

 

OHHHHHH,这是完全不参考别的第二次ac啦!芜湖!

执行结果:

通过

显示详情

添加备注

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:42.8 MB, 在所有 Java 提交中击败了35.79%的用户

通过测试用例:361 / 361

 

这道题主要为原地替换,要求了O1)的额外空间所以我没有使用另一个数组来待装入,最开始的思路是既然只要求了空间,那我就不断遍历好了,一次一次把最大的提到最前面,但是在一些尝试后发现,只要创建一个flag记录当前已找到的不同的数目,并将找到的不同数字直接放入nums[flag]处即可,因为已是升序列表,所以不用担心覆盖掉,且只需要找到与前一个不相等则为新元素。

class Solution {

    public int removeDuplicates(int[] nums) {

        int flag=1;

        for(int i=1;i<nums.length;i++){

            if(nums[i]!=nums[i-1]){

                

                nums[flag]=nums[i];

                flag+=1;

            }

        }

        return flag;

    }

}

 

 

27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

 

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

 

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/remove-element

 

和前一题思路相同,用不等于val的数组成员覆盖等于val的数组成员。

class Solution {

    public int removeElement(int[] nums, int val) {

            int flag=0;

            for(int i=0;i<nums.length;i++){

                if(nums[i]==val){

                    continue;

                }else{

                    nums[flag]=nums[i];

                    flag++;

                }

            }

            return flag;

    }

}

 

28. 实现 strStr()

实现 strStr() 函数。

 

给你两个字符串 haystack needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回  -1

 

 

 

说明:

 

 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

 

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java  indexOf() 定义相符。

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/implement-strstr

 

就是说。谢谢java的智能函数。一句话一道题罢了!

class Solution {

    public int strStr(String haystack, String needle) {

        if(needle.equals("")) return 0;

        return haystack.indexOf(needle);

    }

}

 

Str.indexOf(String s) 查找字符串sstr中首次出现的位置。Str.lastindexOf(String s)可查找出现的最后位置。但是在评论区发现了一个新词:kmp,去查了一下是一种改进的字符串匹配算法,以后研究一下。

 

35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

 

请必须使用时间复杂度为 O(log n) 的算法。

 

 

 

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/search-insert-position

又是一道简单题,做的时候时间挺晚了第一时间写了很多的if,后来一点点整理发现有很多不必要的,最后整理成了一句代码- -,直接ac了,看了眼最高赞评论,写的和我基本是一致(废话,就一句代码。思路就是,遍历数组当第一个大于或等于目标值出现的时候返回此处索引即可。

class Solution {

    public int searchInsert(int[] nums, int target) {

        int[] ans=new int[nums.length];

        int p=0;

        if(nums[nums.length-1]<target) return nums.length;

        for(int i=0;i<nums.length;i++){

            if(nums[i]>=target) return i;

        }

        return 0;

    }

}

 

今天的刷题就愉快的结束啦。今天运气不错,遇到的都是简单的题目(还不是自己只敢做简单类别的题

posted @ 2022-03-16 00:28  水煮小白菜  阅读(17)  评论(0编辑  收藏  举报