《六月集训》第三日——排序

前言

这是六月集训的第三日,今日的训练内容是 排序

解题报告

1.力扣1464

原题链接

1464. 数组中两元素的最大乘积

题目概述

给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。

请你计算并返回该式的最大值。

解题思路

直接排序后返回就行了。

源码剖析

int cmp(const void*a,const void*b){
    return *(int*)a-*(int*)b;
}
int maxProduct(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),cmp);
    return (nums[numsSize-2]-1)*(nums[numsSize-1]-1);
}

2.力扣1287

原题链接

1287. 有序数组中出现次数超过25%的元素

题目概述

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

解题思路

建立一个哈希表,然后找到出现次数超过总容量四分之一的元素就可以啦。

源码剖析

int findSpecialInteger(int* arr, int arrSize){
    int hash[100001]={0};
    int i;
    for(i=0;i<arrSize;++i){
        hash[arr[i]]++;
    }
    for(i=0;i<100001;++i){
        if (hash[i]>(arrSize/4.0)) break;
    }
    return i;
}

3.力扣1636

原题链接

1636. 按照频率将数组升序排序

题目概述

给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。

请你返回排序后的数组。

解题思路

今日陪家长出门太累了,头疼 明天就补上。

源码剖析

4.力扣436

原题链接

436. 寻找右区间

题目概述

给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。

区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。

返回一个由每个区间 i 的 右侧区间 在 intervals 中对应下标组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。

解题思路

源码剖析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值