当前位置: 首页 > wzjs >正文

金华网站制作价格建筑工程网站免费

金华网站制作价格,建筑工程网站免费,常州网站建设公司推荐,学校培训双指针问题 双指针算法的核心逻辑 双指针算法主要用于解决数组划分也叫数组分块类的问题,通过两个指针(这里的指针也可以是数组的下标),将数组进行划分成三个部分,当cur指针进行扫描完整个区间后,即只剩下…

双指针问题

双指针算法的核心逻辑

双指针算法主要用于解决数组划分也叫数组分块类的问题,通过两个指针(这里的指针也可以是数组的下标),将数组进行划分成三个部分,当cur指针进行扫描完整个区间后,即只剩下两个区间,即题目的要求。

283、移动零

题解

class Solution {
public:void moveZeroes(vector<int>& nums) {int dest=0;     //进行代表处理完毕的区间int cur=0;    //进行遍历过的区间while(cur<nums.size()){if(nums[cur]!=0){int temp=nums[dest];nums[dest]=nums[cur];nums[cur]=temp;cur++;dest++;}else{cur++;}}}
};

1083、复写零

题解一:循环覆盖补零法

通过阅读题意

当数组中出现0的时候,需要将0进行复写,将0以后的元素进行向后移动一位,但是数组的长度是固定的,所以说最后一个元素就没了,这里我就直接进行想到了从0之后的位置进行循环向后移动进行覆盖,然后在进行复写0。在进行复写0后向后进行移动两位,防止进行全部置零处理了。

class Solution {
public:void duplicateZeros(vector<int>& arr) {int n = arr.size();for (int i = 0; i < n; ) {if (arr[i] == 0) {// 将后面的元素全部右移一位for (int j = n - 1; j > i; j--) {arr[j] = arr[j - 1];}if (i + 1 < n) {arr[i + 1] = 0; // 复制 0}i += 2; // 跳过已处理的 0} else {i++;}}}
};

题解二:双指针算法

class Solution {
public:void duplicateZeros(vector<int>& arr) {int cur=0;int dest=-1;while(1){if(arr[cur]!=0){++dest;if(dest>=arr.size()-1){break;}cur++;}else{dest+=2;if(dest>=arr.size()-1){break;}cur++;}}cout<<cur<<dest<<endl;while(cur>=0){if(arr[cur]==0){if(dest==arr.size()){dest--;arr[dest]=arr[cur];}else{arr[dest]=arr[cur];arr[--dest]=arr[cur];}cur--;dest--;}else{//cout<<arr[cur]<<arr[dest]<<endl;arr[dest]=arr[cur];cur--;dest--;}}}
};

 202、快乐数

题解

快慢指针法

class Solution {
public:bool isHappy(int n) {   int slow=n-1;int fast=n;int temp1=n;int temp2=n;while(fast!=slow){int count=0;while(temp1){count+=(temp1%10)*(temp1%10);temp1=temp1/10;}slow=count;temp1=count;int num=2;while(num--){count=0;while(temp2){count+=(temp2%10)*(temp2%10);temp2=temp2/10;}temp2=count;}fast=count;}if(fast==1){return true;}else{return false;}}
};

11、盛水最多的容器

题解

通过阅读题意,很容易进行想到通过暴力的方式进行解决,暴力的方式就是通过两个for循环进行依次取两条线进行进行暴力枚举,但是这种方式是超时的,不满足时间复杂度

影响水池中水的因素有两种,分别是两条线的距离两条线中较短的那一条线,这里采取的思想是在刚开始的时候直接将两条线之间的距离设成最大,在两条线之间的距离变小的过程中,只有较短的那条线的长度变长时才有可能容量变大。

class Solution {
public:int maxArea(vector<int>& height) {int left=0;int right=height.size()-1;  //将两条线的距离设成最大int capacity=(height[left]<height[right]?height[left]:height[right])*(right-left);  //进行初始化容量int newcap=0;while(right>left){//判断两条线中较短的那条线进行变长时的容量变化if(height[left]<height[right]){left++;newcap=(height[left]<height[right]?height[left]:height[right])*(right-left);}else{right--;newcap=(height[left]<height[right]?height[left]:height[right])*(right-left);}if(newcap>capacity){capacity=newcap;}}return capacity;}
};

611、有效三角形个数

题解

这道题也不难想,第一时间最容易进行想到的一般都是暴力的方法,但是这道题直接进行暴力解决问题的话需要进行三个for循环进行解决问题,时间复杂度是O(n*n*n)直接就超时了。

可以通过一个for循环和双指针进行对暴力的方法进行优化,将时间复杂度进行优化到O(n*n)

这种优化都是基于单调性进行的优化两个指针一般是不同侧的。

class Solution {
public:class Compare{public:bool operator()(int a,int b){return a<b;}};int triangleNumber(vector<int>& nums) {int left=0;int right=0;int count=0;//进行数组排序sort(nums.begin(),nums.end());for(int i=nums.size()-1;i>1;i--){left=0;right=i-1;; while (left < right) {if (nums[left] + nums[right] > nums[i]) {count += right - left;--right;} else {++left;}}}return count;}
};

179、查找总价格为目标值的两个商品 

题解:

暴力:

通过两个for循环进行将数组中的任意两个数进行求和然后进行比对,时间复杂度O(n*n)。

双指针:

通过双指针对暴力的方式进行优化,先通过排序的方式进行将数组处理成有序,然后依然可以通过单调性进行优化。时间复杂度O(logN+O(n))

class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int left=0;int right=price.size()-1;//进行排序sort(price.begin(),price.end());while(left<right){if(price[left]+price[right]>target){right--;}else if(price[left]+price[right]<target){left++;}else{break;}}return {price[left],price[right]};}
};

15、三数之和 

题解

暴力

直接无脑三个for循环然后进行遍历。

双指针

通过双指针进行优化,这道题的思路上有效三角形的个数那道题的思想非常的相似。通过for循环进行固定一个数,然后通过双指针进行进行优化。

这道题最最最恶心的一个点是需要进行去重,这里着重说一下去重的思路,需要进行内部去重和外部去重,内部去重就是for循环进行固定的数进行去重(跳过相同的数),外部去重(双指针进行去重)。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//进行排序sort(nums.begin(),nums.end());vector<vector<int>> ret={};for(int i=nums.size()-1;i>1;i--){int left=0;int right=i-1;//进行内部去重if (i < nums.size()-1&& nums[i] == nums[i+1]) continue;while(left<right){if(nums[left]+nums[right]+nums[i]>0){right--;}else if(nums[left]+nums[right]+nums[i]<0){left++;}else{ret.push_back({nums[left],nums[right],nums[i]});//进行外部去重while(left < right &&nums[right]==nums[right-1]){right--;}while(left < right &&nums[left+1]==nums[left]){left++;}left++;right--;}}}return ret;}};

 18、四数之和

题解

双指针

和上一道题思路一样,不进行解释了。

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> res;int n = nums.size();if (n < 4) return res;sort(nums.begin(), nums.end());for (int i = 0; i < n-3; ++i) {// 跳过重复值if (i > 0 && nums[i] == nums[i-1]) continue;// 提前终止条件(可选优化)if ((long long)nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target) break;if ((long long)nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target) continue;for (int j = i+1; j < n-2; ++j) {// 跳过重复值if (j > i+1 && nums[j] == nums[j-1]) continue;int left = j+1, right = n-1;while (left < right) {long long sum = (long long)nums[i] + nums[j] + nums[left] + nums[right];if (sum == target) {res.push_back({nums[i], nums[j], nums[left], nums[right]});// 跳过重复值while (left < right && nums[left] == nums[left+1]) ++left;while (left < right && nums[right] == nums[right-1]) --right;++left;--right;}else if (sum < target) ++left;else --right;}}}return res;}
};


文章转载自:

http://oSegRd6c.qmrsf.cn
http://zRlDWuh3.qmrsf.cn
http://xXUIIUgU.qmrsf.cn
http://CWSGUnvd.qmrsf.cn
http://4GGUf0aZ.qmrsf.cn
http://r5jVVDVf.qmrsf.cn
http://vpuEKt2S.qmrsf.cn
http://PuNutOQe.qmrsf.cn
http://bbd78P1Q.qmrsf.cn
http://Vv1mEWiL.qmrsf.cn
http://KRcFgMmN.qmrsf.cn
http://YB6tjBXg.qmrsf.cn
http://EeKcnwSc.qmrsf.cn
http://L9Vz7KWj.qmrsf.cn
http://qf5FrJnn.qmrsf.cn
http://tVToiOoq.qmrsf.cn
http://6Ex7DupX.qmrsf.cn
http://naXmAahk.qmrsf.cn
http://BwHLMcCr.qmrsf.cn
http://wgANaiXf.qmrsf.cn
http://GrOuwuEK.qmrsf.cn
http://1cD39zFd.qmrsf.cn
http://ASBOkr2B.qmrsf.cn
http://iQ2KwCjQ.qmrsf.cn
http://kECRYa0K.qmrsf.cn
http://pjbeZ3j8.qmrsf.cn
http://ZtKCSpsI.qmrsf.cn
http://YTffm5pr.qmrsf.cn
http://FEuRJTuA.qmrsf.cn
http://eUbBMaue.qmrsf.cn
http://www.dtcms.com/wzjs/722677.html

相关文章:

  • 广州做网站公司哪家好哪个网站可以免费看小说不收费
  • 网站托管平台wordpress只显示文字
  • 如何查询某个网站的设计公司网站开发core文件作用
  • 易语言网站做软件教你做面食的网站
  • 怎么做可上传图片的网站中原建设信息网 网站
  • 深圳做营销网站建设六安论坛招聘信息
  • 网站建设中html代码花生壳怎么建设购物网站
  • 网站获取用户开发导航app多少钱
  • 做网站优化竞价区别巴中网站建设培训班
  • 我要做网站做网站临泉手机写代码的软件
  • ppt模版模板免费网站wordpress 所有文章404
  • 网站多语言包深圳对留学生创业政策
  • 注册公司网站模板长沙官网制作
  • 免费素材网站素材库河南电力建设工程公司网站
  • 德惠网站建设pc端网站建设电话
  • 羊肉口报关做网站wordpress链接图像地址
  • 电子商务网站建设与管理试卷6邢台制作
  • 潍坊视频类网站建设潍坊seo培训
  • 揭阳网站制作套餐首页关键词是不是一个网站的核心关键词所在
  • 没有备案的网站怎么挂广告厦门网页建站申请费用
  • 网站开发+百度编辑器网站开发用什么字体
  • 事务所网站制作方案网络规划设计师多少分通过
  • 线上注册公司是在哪个网站甘肃建设厅执业资格注册中心网站
  • 网站开发技术总监面试题巴中哪里做网站
  • 广州网站建设菲利宾短网址还原工具
  • 长沙网站建设要多少钱网站怎么做图片动态图片不显示
  • 网站字体字号移动软件开发专业
  • 网站建设国家和行业标准长沙最好玩的地方排名
  • wordpress怎样增加移动端莱阳seo外包
  • vps网站打开速度调节洛阳网站备案