【数据结构与算法】(一)数组
知识点:
C++ sort 快排
而且vector,set,map这些容器的end()取出来的值实际上并不是最后一个值,而end的前一个才是最后一个值!
需要用prev(xxx.end()),才能取出容器中最后一个元素。
通过使用 * vector.begin() 或 *( vector.end()-1) 来获得 vector 中第一个或最后一个的值;
也可以直接使用 vector.front() 、vector.back() 来得到 vector 首尾的值。
解体思路,首先排序,排序后,c指向的是第一个数据, first 是从c的下一个开始往右遍历,last 是从最后一个数据开始,往左遍历。
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; sort(nums.begin(),nums.end()); //首先排序 vector<int>::iterator c,first,last; //使用双指针 if(nums.size()<3||nums.front()>0 || nums.back()<0) return {}; //要特别注意 nums.end()-1 指向的才是最后一个数据 for(c=nums.begin();c!=(nums.end()-2);c++){ if(*c>0) break; if(*c==0){ if(*(c+1)==0&&*(c+2)==0){ vector<int> value={0,0,0}; result.push_back(value); break; }else break; } if(c>nums.begin()&&*c==*(c-1)) continue; first=c+1; last=nums.end()-1; while(first<last){ if(first-1>=c+1){ if(*(first-1)==*first){ first++; continue; } } int count=*c+*first+*last; if(count==0){ vector<int> value={*c,*first,*last}; result.push_back(value); first++; last--; continue; } if(count>0){ last--; }else { first++; } } } return result; } };
浙公网安备 33010602011771号