StructBERT API性能测试:并发处理能力详解
2026/1/11 16:47:23
寻星探路的个人简介:
在处理数组相关算法时,双指针(Two Pointers)能够巧妙地利用区间单调性或位置关系,将原本需要 的暴力搜索优化至 。本文精选四道经典题型,附带保姆级代码注释。
slow):指向“下一个非零元素应该存放的位置”。fast):遍历数组,寻找非零元素。classSolution{publicvoidmoveZeroes(int[]nums){// slow 指针之前(不含 slow)全是非零数intslow=0;for(intfast=0;fast<nums.length;fast++){// 当快指针发现非零数时if(nums[fast]!=0){// 如果快慢指针不相等,说明中间有 0,需要交换if(fast>slow){inttemp=nums[slow];nums[slow]=nums[fast];nums[fast]=temp;}// 无论是否交换,slow 都要后移,因为当前 slow 位置已被非零数占据slow++;}}}}classSolution{publicintmaxArea(int[]height){intleft=0,right=height.length-1;// 定义左右边界intmax=0;// 存储最大面积while(left<right){// 1. 计算当前面积:宽 (right - left) * 高 (左右两端的最小值)intcurrentArea=Math.min(height[left],height[right])*(right-left);// 2. 更新全局最大面积max=Math.max(max,currentArea);// 3. 贪心策略:哪边矮,就移动哪边的指针if(height[left]<height[right]){left++;}else{right--;}}returnmax;}}a,在剩下的区间里通过双指针寻找b和c,使得a + b + c = 0。classSolution{publicList<List<Integer>>threeSum(int[]nums){List<List<Integer>>ans=newArrayList<>();Arrays.sort(nums);// 1. 先排序intn=nums.length;for(inti=0;i<n;i++){// 如果当前数大于 0,由于数组有序,后续三个数之和一定大于 0if(nums[i]>0)break;// 2. 对第一个数 a 去重:如果当前数和前一个数相同,跳过if(i>0&&nums[i]==nums[i-1])continue;intleft=i+1,right=n-1;while(left<right){intsum=nums[i]+nums[left]+nums[right];if(sum==0){ans.add(Arrays.asList(nums[i],nums[left],nums[right]));// 3. 对第二个数 b 去重while(left<right&&nums[left]==nums[left+1])left++;// 4. 对第三个数 c 去重while(left<right&&nums[right]==nums[right-1])right--;left++;right--;}elseif(sum<0){left++;// 和太小,左指针右移增加数值}else{right--;// 和太大,右指针左移减小数值}}}returnans;}}classSolution{publicinttrap(int[]height){intleft=0,right=height.length-1;intleftMax=0,rightMax=0;// 记录左边和右边遇到的最高高度intres=0;while(left<right){// 更新左右两侧目前的最高墙leftMax=Math.max(leftMax,height[left]);rightMax=Math.max(rightMax,height[right]);// 如果左边的墙比右边的墙矮// 意味着:对于 left 这个点,接多少水取决于左侧的 leftMax(因为右侧一定有比它更高的墙)if(leftMax<rightMax){res+=(leftMax-height[left]);left++;}else{// 反之,right 这个点接多少水取决于右侧的 rightMaxres+=(rightMax-height[right]);right--;}}returnres;}}(0, length-1)还是(0, 0)?通过以上四道题的练习,你应该能感受到双指针在降低时间复杂度方面的巨大威力。
感谢你的阅读!如果觉得代码注释对你有帮助,欢迎点赞和收藏!