求大神给下c++版的完整解法,包括头文件,主函数,类体。
请在文中注明一下具体而详细的思路方法,我学了哈希表和二叉树,一直都不太懂,感觉怪怪的。想要看看大神完整连贯的思路,模仿一下。c++解法,求大神自己敲一下,不要复制粘贴,菜鸡伤不起。
[LeetCode]018-4-Sum的c++解法:只能用哈希表和二叉树搜索方法
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- zqbnqsdsmd 2018-05-28 07:43关注
vector> fourSum(vector& nums, int target)
{
int n = nums.size();
QuickSort(nums,0,n-1);int i,j,k,s,sum,t1,t2; vector<int> turple; vector<vector<int>> result; if(n < 4) return result; t1 = nums[0]; for(i=0;i<n-3;i++) { if(i && t1 == nums[i]) continue; t2 = nums[i+1]; for(j=i+1;j<n-2;j++) { if(t2 == nums[j] && j >i+1) continue; sum = target - nums[i] - nums[j]; k = j+1; s = n-1; while(k<s) { if(nums[k] + nums[s] == sum) { turple.push_back(nums[i]); turple.push_back(nums[j]); turple.push_back(nums[k]); turple.push_back(nums[s]); result.push_back(turple); turple.clear(); k++; s--; } else if(nums[k] + nums[s] < sum) k++; else s--; } t2 = nums[j]; } t1 = nums[i]; } result.erase(unique(result.begin(),result.end()),result.end()); return result; } void QuickSort(vector<int>&nums,int low,int high) { if(low<high) { int pivot = nums[low]; int first = low; int last = high; while(first<last) { while(nums[last] > pivot && last > first) { --last; } nums[first] = nums[last]; while(nums[first] <= pivot && last >first) { ++first; } nums[last] = nums[first]; } nums[first] = pivot; QuickSort(nums,low,first-1); QuickSort(nums,first+1,high); } else return; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥200 uniapp长期运行卡死问题解决
- ¥15 latex怎么处理论文引理引用参考文献
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?