1、排序数组
vector<int> sortArray(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums;
}
2、多数元素
int majorityElement(vector<int>& nums) {
unordered_map<int,int> cnt;
int n=nums.size();
for(int i=0;i<nums.size();i++){
cnt[nums[i]]++;
if(cnt[nums[i]]>n/2){
return nums[i];
}
}
return -1;
}
排完序以后,如果多数元素存在,则一定在数组的中间位置
int majorityElement(vector<int>& nums) {
int n=nums.size();
sort(nums.begin(),nums.end());
return nums[n/2];
}
3、存在重复元素
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size();i++){
if(nums[i]==nums[i-1]){
return true;
}
}
return false;
}
4、最大间距
int maximumGap(vector<int>& nums) {
int n=nums.size();
int max=0;
sort(nums.begin(),nums.end());
for(int i=1;i<n;i++){
if(nums[i]-nums[i-1]>max){
max=nums[i]-nums[i-1];
}
}
return max;
}
5、按奇偶排序数组
vector<int> sortArrayByParity(vector<int>& A) {
// 头
int i = 0;
// 尾
int j = A.size() - 1;
while (i < j)
{
// 发现奇数在i而偶数在j的情况,则交换
if (A[i] % 2 > A[j] % 2)
{
swap(A[i], A[j]);
}
// 按照数的情况来移动两侧指针
if (A[i] % 2 == 0)
{
++i;
}
if (A[j] % 2 == 1)
{
--j;
}
}
return A;
}
6、最小时间差
int getTime(string &ti){
return (int(ti[0]-'0')*10+int(ti[1]-'0'))*60+int(ti[3]-'0')*10+int(ti[4]-'0');
}
int findMinDifference(vector<string>& timePoints) {
int n=timePoints.size();
vector<int> ret(n);
int ans=1440;
for(int i=0;i<n;i++){
ret[i]=getTime(timePoints[i]);
}
sort(ret.begin(),ret.end());
for(int i=1;i<n;i++){
ans=min(ans,ret[i]-ret[i-1]);
}
ans=min(ans,ret[0]-ret[n-1]+1440);
return ans;
}
7、三角形的最大周长
int largestPerimeter(vector<int>& nums) {
int n=nums.size();
sort(nums.begin(),nums.end());
for(int i=n-1;i>=2;i--){
if(nums[i]<nums[i-1]+nums[i-2]){
return nums[i]+nums[i-1]+nums[i-2];
}
}
return 0;
}