Ending
Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下
如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)
吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。
return ans;
}
};
这题可以作为双指针思想的最基础的映射
步骤:
1.先利用Arrays.sort将数组排好序,排序的时间复杂度为O(nlogn)
2.设一个指针i=0处于排序后的数组的头部,是一个j=n-1(n为数组的长度)即为数组的尾部
3.设一个变量add为i指向的数和j指向的数之和,即为nums[i]+nums[j]
4.我们对add的值和target进行比较,如果add大,说明我们需要让add变小,即让j向左移动。反之则让i向右移动。
5.当我们add等于target时跳出循环,通知接收nums【i】和nums【j】的值。(其实到这里双指针的思想就提现出来了,这样我们只用了O(n)的时间来遍历,但由于本题是输出数的下标,所以我们需要copy一份nums数组为arr,去遍历寻找原下标)
双指针做法
class Solution {
public int[] twoSum(int[] nums, int target) {
int n=nums.length;
int[] arr=new int[n];
System.arraycopy(nums,0,arr,0,n);
Arrays.sort(nums);
int i=0;
int j=n-1;
int add=0;
do{
add=nums[i]+nums[j];
if(add>target)
j–;
else if(add<target) i++;
}while(add!=target);
int a=nums[i];
int b=nums[j];
int[] str=new int[2];
for(int c=0;c<n;c++){
if(arr[c]==a){
str[0]=c;
break;
}
}
for(int d=0;d<n;d++){
if(arr[d]==b&&str[0]!=d){
最后
学习视频:
大厂面试真题:
ff00ff254613a03fab5e56a57acb)收录**