# 【LeetCode】移动零&&颜色分类&&有序数组的平方&&有效的山脉数组

## 👉移动零👈

1 <= nums.length <= 104

-231 <= nums[i] <= 231 - 1

void moveZeroes(int* nums, int numsSize)
{
int dst=0;
int src=0;
while(src<numsSize)
{
if(nums[src]!=0)
{
int tmp=nums[src];
nums[src]=nums[dst];
nums[dst]=tmp;
src++;
dst++;
}
else
src++;
}
}


### 思路二

void moveZeroes(int* nums, int numsSize)
{
int src = 0;
int dst = 0;
while (src < numsSize)
{
if (nums[src] != 0)
{
nums[dst++] = nums[src++];
}
else
{
src++;
}
}
//将数组末尾的元素赋值为0
while (dst < numsSize)
{
nums[dst++] = 0;
}
}


## 👉调整奇数偶数顺序👈

• 0 <= nums.length <= 50000
• 0 <= nums[i] <= 10000

int* exchange(int* nums, int numsSize, int* returnSize)
{
int index=0;
int pos=0;
while(index<numsSize)
{
if(nums[index]%2)
{
int tmp=nums[index];
nums[index]=nums[pos];
nums[pos]=tmp;
index++;
pos++;
}
else
index++;
}
*returnSize=numsSize;
return nums;
}


## 👉颜色分类👈

n == nums.length

1 <= n <= 300

nums[i] 为 0、1 或 2

void sortColors(int* nums, int numsSize)
{
int left = 0;
int right = numsSize - 1;
int src = 0;
while (src <= right)
{
if (nums[src] < 1)
{
int tmp = nums[src];
nums[src] = nums[left];
nums[left] = tmp;
left++;
src++;
}
else if (nums[src] == 1)
src++;
else
{
int tmp = nums[src];
nums[src] = nums[right];
nums[right] = tmp;
right--;
}
}
}


## 👉有序数组的平方👈

1 <= nums.length <= 104

-104 <= nums[i] <= 104 nums 已按 非递减顺序 排序

### 思路一

int cmp(int* a, int* b)
{
return *a - *b;
}
int* sortedSquares(int* nums, int numsSize, int* returnSize)
{
int* num = (int*)malloc(sizeof(int) * numsSize);
for (int i = 0; i < numsSize; i++)
{
nums[i] = nums[i] * nums[i];
}
qsort(nums, numsSize, sizeof(int), cmp);
*returnSize = numsSize;
return nums;
}


### 思路二

int* sortedSquares(int* nums, int numsSize, int* returnSize)
{
int* num = (int*)malloc(sizeof(int) * numsSize);
if(num == NULL)
{
*returnSize = 0;
return num;
}
int left = 0;
int right = numsSize - 1;
int index = numsSize - 1;
while (left <= right)
{
if ((nums[left] * nums[left]) > (nums[right] * nums[right]))
{
num[index--] = nums[left] * nums[left];
left++;
}
else
{
num[index--] = nums[right] * nums[right];
right--;
}
}
*returnSize = numsSize;
return num;
}


## 👉有效的山脉数组👈

arr.length >= 3

arr[0] < arr[1]< ... arr[i-1] < arr[i]

arr[i] > arr[i+1] > ... > arr[arr.length - 1]

示例 1：

• 1 <= arr.length <= 10^4
• 0 <= arr[i] <= 10^4

bool validMountainArray(int* arr, int arrSize)
{
if (arrSize < 3)
return false;
int left = 0;
int right = arrSize - 1;
//防止越界
while ((left < arrSize - 1) && (arr[left] < arr[left + 1]))
{
left++;
}
//防止越界
while ((right > 0) && (arr[right] < arr[right - 1]))
{
right--;
}
//如果left或者right在起始位置，说明不是山峰
if ((left == right) && (left != 0) && (right != arrSize - 1))  return true;
return false;
}


## 👉总结👈

|
8天前
|

Leetcode—— 删除排序数组中的重复项——C语言
Leetcode—— 删除排序数组中的重复项——C语言
18 0
|
8天前
|

Leetcode----旋转数组 ------C语言篇
Leetcode----旋转数组 ------C语言篇
16 0
|
2天前
|

7 0
|
3天前
|

【力扣刷题】数组实现栈、后缀表达式（逆波兰表达式）求值、中缀表达式转换为后缀表达式（无括号&&有括号）
【力扣刷题】数组实现栈、后缀表达式（逆波兰表达式）求值、中缀表达式转换为后缀表达式（无括号&&有括号）
8 0
|
5天前
DAY-4 | 力扣 - 求自身以外数组的乘积：区间划分，左右累乘，巧求乘积

13 1
|
7天前
|

【数据结构与算法 | 基础篇】[数组专题]力扣88
【数据结构与算法 | 基础篇】[数组专题]力扣88
16 2
|
8天前
|

Leetcode—合并两个有序数组—C语言
Leetcode—合并两个有序数组—C语言
13 0
|
8天前

13 0
|
9天前

15 0
|
15天前
|

leetcode代码记录（寻找两个正序数组的中位数
leetcode代码记录（寻找两个正序数组的中位数
16 2