4.最大间距
给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。
class Solution {
public:
int maximumGap(vector<int>& nums) {
int n=nums.size();
if(n<2) return 0;
sort(nums.begin(),nums.end());
int count=0;
int tmp;
for(int i=0;i<n-1;i++){
tmp=nums[i+1]-nums[i];
if(tmp>count){
count=tmp;
};
};
return count;
}
};
5.多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
return nums[nums.size() / 2];
}
};
//如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为n/2(向下取整)的元素(下标从 0 开始)一定是众数
法二:暴力循环
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(begin(nums),end(nums));
int all=1,target=nums.size()/2;
for(int i=0;i<nums.size()-1;i++){
all++;
if(nums[i]!=nums[i+1]) all=1;
if(all>target) return nums[i];
}
return nums[0];
}
};
6.最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
一种思路:输入数组有相同数字开头 ,例如 [4,42][4,42] 和 [4,45][4,45]。
对于 [4,42][4,42],比较 442 > 424442>424,需要把 44 放在前面;
对于 [4,45][4,45],比较 445 < 454445<454,需要把 4545 放在前面。
输入数组 没有相同数字开头,可以比较输入数组的每个元素的最高位,最高位相同的时候比较次高位,以此类推,完成排序,然后把它们拼接起来。
思路二:两个数拼起来,哪个大选哪个
class Solution {
public:
string largestNumber(vector<int>& nums) {
auto cmp = [&](int a, int b) {
auto sa = to_string(a);
auto sb = to_string(b);
return sa + sb > sb + sa;
};
sort(nums.begin(), nums.end(), cmp);
string res;
for (const auto& num : nums) {
res += to_string(num);
}
auto pos = res.find_first_not_of('0');
if (pos == string::npos) {
return "0";
}
return res.substr(pos);
}
};