刷题第二天
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
这道题主要为原地替换,要求了O(1)的额外空间所以我没有使用另一个数组来待装入,最开始的思路是既然只要求了空间,那我就不断遍历好了,一次一次把最大的提到最前面,但是在一些尝试后发现,只要创建一个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) 查找字符串s在str中首次出现的位置。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;
}
}
今天的刷题就愉快的结束啦。今天运气不错,遇到的都是简单的题目(还不是自己只敢做简单类别的题