75. 颜色分类 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/sort-colors/颜色分类其实就是排序,下面我将使用c,和c++两种语言解题
//c
void Swap(int *a, int *b) {//定义一个交换变量的函数
*a=*a^*b;//异或的方法
*b=*a^*b;
*a=*a^*b;
}
void BubbleSort(int n, int *a) { //简单的冒泡排序,将最大的数一直冒泡到最后,依次往复,时间复杂度比较高,我还会讲一下英雄哥的冒泡,这个比较好理解
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
Swap(&a[i],&a[j]);
}
}
}
}
void sortColors(int* nums, int numsSize){
BubbleSort(numsSize, nums);
}
//c++
class Solution {
public:
void sortColors(vector<int>& nums) {//直接stl库函数sort就可以解决
sort(nums.begin(),nums.end());
}
};
这里对于英雄哥的方法进行解释
#define Type int
void Swap(Type* a, Type* b) {//交换函数
Type tmp = *a;
*a = *b;
*b = tmp;
}
void BubbleSort(int n, Type *a) {
bool swapped;
int last = n;
do {//冒泡开始
swapped = false;
for(int i = 0; i < last - 1; ++i) {
if(a[i] > a[i+1]) {
Swap(&a[i], &a[i+1]);
swapped = true; // 标记交换
}
}
--last;
}while (swapped);//无论怎样 最后只剩一个元素的时候一定不会发生交换
}
void sortColors(int* nums, int numsSize){
BubbleSort(numsSize, nums);
}
至少是其他数字两倍的最大数 - 至少是其他数字两倍的最大数 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/largest-number-at-least-twice-of-others/一种巧办法,找出第二大的数,将他与第一大的数作比较,如果第一大的数比第二大的数的二倍还大,那就比后面的数都大2倍
int dominantIndex(int* nums, int numsSize){
if(numsSize<2)
{
return 0;
}
int max1=-1000,max2=-1000,val;
for(int i=0;i<numsSize;i++)//找出第一大的数
{
if(nums[i]>max1)
{
max1=nums[i];
val=i;
}
}
for(int i=0;i<numsSize;i++)//找出第二大的数
{
if(nums[i]>max2&&nums[i]<max1)
{
max2=nums[i];
}
}
return max1>=(2*max2)?val:-1;//善用三目运算符
}