简单粗暴,记录备战过程,持续更新
数组
字符串大家太熟了,不过算法题可不简单。解题思路一样,但是每个语言的实现可打不同,熟悉默写jdk函数。
适用场景
实战
实战1 leetcode 354. 俄罗斯套娃信封问题
实战2 leetcode 674. 最长连续递增序列
import java.util.*;
class Solution {
public int findLengthOfLCIS(int[] nums) {
int len = nums.length;
if(len <= 0){
return 0;
}
int maxLen = 0;
int slow = 0;
int fast = 1;
while(fast < len){
// 右边小于等于左边
if(nums[fast] <= nums[fast-1] ){
maxLen = Math.max(maxLen,fast-slow);
slow = fast;
}
fast++;
}
maxLen = Math.max(maxLen,fast-slow);
return maxLen;
}
}
实战3 leetcode 128. 最长连续序列
import java.util.*;
class Solution {
public int longestConsecutive(int[] nums) {
int len = nums.length;
if(len <=0 ){
return 0;
}
// 哈希
Set<Integer> numSet = new HashSet<>();
for(int i = 0; i< len; i++){
numSet.add(nums[i]);
}
int ans = 0;
// 遍历
for(int num : numSet){
// 有小于的就忽略
if(!numSet.contains(num-1)){
int numTmp = num + 1;
int ansTmp = 1;
// 包含递增元素
while(numSet.contains(numTmp)){
ansTmp++;
numTmp++;
}
ans = Math.max(ans,ansTmp);
}
}
return ans;
}
}
实战4 leetcode 11. 盛最多水的容器
import java.util.*;
class Solution {
public int maxArea(int[] height) {
int len = height.length;
if(len <= 1){
return 0;
}
int ans = 0;
int left = 0 ;
int right = len - 1;
while(left < right){
int minHeight = Math.min(height[left],height[right]);
int ansTmp = minHeight * (right - left);
ans = Math.max(ansTmp,ans);
if(left < right){
left++;
}else{
right--;
}
}
return ans;
}
}
实战5 leetcode 4. 寻找两个正序数组的中位数
不会,TODO
实战6 leetcode 26. 删除有序数组中的重复项
class Solution {
public int removeDuplicates(int[] nums) {
int len = nums.length;
if(len <= 0){
return 0;
}
int slow = 1;
int fast = 1;
while(fast < len){
if(nums[fast] != nums[fast-1] ){
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
}
实战6 leetcdoe 560. 和为 K 的子数组
import java.util.*;
class Solution {
public int subarraySum(int[] nums, int k) {
int len = nums.length;
int ans = 0 ;
int sum = 0 ;
Map<Integer,Integer> map = new HashMap<>();
map.put(0,1);
for(int i = 0; i < len ; i++){
sum += nums[i];
if(map.containsKey(sum - k)){
int count = map.get(sum - k);
ans += count;
}
map.put(sum , map.getOrDefault(sum ,0) +1 );
}
return ans;
}
}
实战7 leetcode 167. 两数之和 II - 输入有序数组
import java.util.*;
class Solution {
public int[] twoSum(int[] numbers, int target) {
int len = numbers.length;
Map<Integer,Integer> map = new HashMap<>();
int [] ret = new int[2];
for(int i = 0; i < len;i++){
if(map.containsKey(target - numbers[i])){
ret[0] = map.get(target - numbers[i]) +1;
ret[1] = i + 1;
break;
}
map.put(numbers[i],i);
}
return ret;
}
}
实战8 LeetCode 15 三数之和
不会,TODO
实战9 LeetCode 18 四数之和
不会,TODO
实战10 leetcode 55. 跳跃游戏
class Solution {
public boolean canJump(int[] nums) {
int len = nums.length;
int canReach = len - 1;
for(int i = len -1 ; i >= 0; i-- ){
if(nums[i] >= (canReach - i)){
canReach = i;
}
}
return canReach == 0 ? true : false;
}
}
实战11 leetcode 45. 跳跃游戏 II
import java.util.*;
class Solution {
public int jump(int[] nums) {
int step = 0;
int canReach = 0;
int nextReach = 0;
int len = nums.length;
for(int i = 0; i < len-1 ;i++ ){
canReach = Math.max(canReach,nums[i]+i);
if(nextReach == i){
step++;
nextReach = canReach;
}
}
return step;
}
}