首页 > 编程知识 正文

java找出数组中出现次数最多的元素,对数组的前n个整数进行排序

时间:2023-05-04 02:12:46 阅读:267333 作者:773

问题描述

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

问题分析

基本思路就是先对数组排序,顺序选择一个数字,然后使用左右指针,依次对剩下数据进行遍历,考虑到结果会有重复,所以,要注意如何去重,详细思路请见源代码。

源代码 class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; if(nums.size() <= 2) return res; sort(nums.begin(), nums.end()); int l,r; int sum=0; for(int i=0;i<nums.size()-2;i++) { if(nums[i]>0) return res; //如果前后两个数相同的话,那么最终找出的另外两个数结果一定是相同的,所以可以直接跳过 if(i>0&&nums[i]==nums[i-1]) continue; l=i+1; r=nums.size()-1; while(l<r) { sum=nums[i]+nums[l]+nums[r]; if(sum==0) { res.push_back({nums[i],nums[l],nums[r]}); l++; r--; //这里也是为了去重,在以i为基础,搜索后面两个数的时候,面对重复的可以直接跳过,因为最终得到的结果一定是相同的 while(l<r&&nums[l]==nums[l-1]) l++; while(l<r&&nums[r]==nums[r+1]) r--; } else if(sum<0) { l++; } else { r--; } } } return res; }};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。