欧克吖~
我是悟 空,经历了前一个月各种面试,在算法方面被 “算法题按在地上打、摩擦~”。
决定细心革面重新刷题:开启LeetCode模式:备战秋招了!
我会把自己刷题的代码放在这里做参考。
如果对你有用的话,可以关注我的更新,大家一起成长!
今天是 167. 三数之和。 属于 两数之和的变形。
送给大家:"王也道长"的一句话:
27.移除指定元素
**悟空解析:**1. 可以根据题意 直接暴力解:很简单: 直接代码:
时间复杂度 n;
class Solution {
public int removeElement(int[] nums, int val) {
int index=0;
for(int i=0;i<nums.length;i++){
//如果不是制定元素 直接忽略 将后面存入 数组
if(nums[i]!=val){
nums[index++]=nums[i];
}
}return index;
}
}
2.双指针:这也是处理数组算法题 常用的一种解题思路:
- 双指针:
- 快慢指针:
- 对撞指针:
以下是这几种方法的代码
//对撞指针
public class _lc273 {
public static void main(String[] args) {
int[] arr = {1, 2, 2, 3, 2, 3, 1};
int i = removeElement(arr, 1);
System.out.println(i);
}
public static int removeElement(int[] arr, int val) {
if (arr == null || arr.length == 1) return 0;
// 在外的 right 和 在内的不一样
int left = 0;
int right =arr.length-1;
// 区别在这 外面-1;
//导致循环 小 =
while (left <= right) {
if (arr[left] == val) {
// 内部的不一样
arr[left] = arr[right];
right--;
// 要不等就直接走
} else {
left++;
}
}
return left;
}
}
//快慢指针:
public class _lc272 {
public static void main(String[] args) {
int[] arr = {3, 2, 2, 3, 2, 1, 1};
int i = RemoveNumber(arr,3);
System.out.println(i);
}
public static int RemoveNumber(int[] arr,int val){
if (arr.length==1) return 0;
int slow=0;
int fast=0;
while (fast<arr.length){
if (arr[fast] != val){
arr[slow] =arr[fast];
slow++;
}
fast++;
}
return slow;
}
}
悟空碎碎念:对于一维数组算法的处理:基本就是
- 按题模拟
- 双指针
- 数学公式:按照制定的公式 达到省空间 省时间的目的:
例如:lc448题:
448:消失的数字!!!
本次的:力扣—Everyday: 就分享到这~
我们下次见~