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;
}