455. 分发饼干
int cmp(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize)
{
qsort(g, gSize, sizeof(int), cmp);
qsort(s, sSize, sizeof(int), cmp);
int i = 0, j = 0;
while (i < gSize && j < sSize) {
if (g[i] <= s[j]) {
i++;
}
j++;
}
return i;
}
435. 无重叠区间
int cmp(const void* a, const void* b)
{
int *p1 = *(int**)a, *p2 = *(int**)b;
if (p1[1] == p2[1]) {
return p1[0] - p2[0];
}
else {
return p1[1] - p2[1];
}
}
int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize)
{
if (intervalsSize == 0) {
return 0;
}
qsort(intervals, intervalsSize, sizeof(intervals[0]), cmp);
int end = intervals[0][1];
int cnt = 1;
for(int i = 1; i < intervalsSize; i++) {
if(intervals[i][0] < end) {
continue;
}
end = intervals[i][1];
cnt++;
}
return intervalsSize - cnt;
}
452. 用最少数量的箭引爆气球
int cmp(const void* a, const void* b)
{
int* p1 = *(int**)a;
int* p2 = *(int**)b;
if (p1[1] == p2[1]) {
return p1[0] - p2[0];
}
else {
return p1[1] - p2[1];
}
}
int findMinArrowShots(int** points, int pointsSize, int* pointsColSize)
{
if (pointsSize == 0) {
return 0;
}
qsort(points, pointsSize, sizeof(points[0]), cmp);
int end = points[0][1];
int cnt = 1;
for (int i = 1; i < pointsSize; i++) {
if (points[i][0] <= end) {
continue;
}
end = points[i][1];
cnt++;
}
return cnt;
}
406. 根据身高重建队列
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int cmp(const void* a, const void* b)
{
int* p1 = *(int**)a;
int* p2 = *(int**)b;
if (p1[0] == p2[0]) {
return p1[1] - p2[1];
}
else {
return p2[0] - p1[0];
}
}
void insert(int** people, int size, int *toBeInserted, int index)
{
int i = size;
while (index < i) {
people[i] = people[i-1];
i--;
}
people[index] = toBeInserted;
}
int** reconstructQueue(int** people, int peopleSize, int* peopleColSize, int* returnSize, int** returnColumnSizes)
{
int i;
int** Ret = (int**)malloc(sizeof(int*) * peopleSize);
for (i = 0; i < peopleSize; i++) {
Ret[i] = (int*)malloc(sizeof(int) * 2);
}
*returnSize = peopleSize;
*returnColumnSizes = (int*)malloc(sizeof(int) * peopleSize);
for (i = 0; i < peopleSize; ++i) {
(*returnColumnSizes)[i] = 2;
}
qsort(people, peopleSize, sizeof(people[0]), cmp);
for (i = 0; i < peopleSize; i++) {
insert(Ret, i, people[i], people[i][1]);
}
return Ret;
}
121. 买卖股票的最佳时机
int maxProfit(int* prices, int pricesSize)
{
if (pricesSize == 0) {
return 0;
}
int max = 0;
int min = prices[0];
for (int i = 1; i < pricesSize; i++) {
if(prices[i] < min) {
min = prices[i];
}
else if (prices[i] - min > max) {
max = prices[i] - min;
}
}
return max;
}
122. 买卖股票的最佳时机 II
int maxProfit(int* prices, int pricesSize)
{
int max = 0;
for (int i = 1; i < pricesSize; i++) {
if (prices[i] > prices[i - 1]) {
max += (prices[i] - prices[i - 1]);
}
}
return max;
}
605. 种花问题
bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n)
{
int i=0, count=0;
while(i < flowerbedSize) {
if((flowerbed[i] == 0) && (i == 0 || flowerbed[i - 1] == 0) && (i == flowerbedSize - 1 || flowerbed[i + 1] == 0)) {
flowerbed[i] = 1;
count++;
}
i++;
}
return count>=n;
}
392. 判断子序列
bool isSubsequence(char * s, char * t)
{
int sLen = strlen(s), tLen = strlen(t);
int i = 0, j = 0;
while (i < sLen && j < tLen) {
if (s[i] == t[j]) {
i++;
}
j++;
}
return (i == sLen) ? true : false;
}
665. 非递减数列
bool checkPossibility(int* nums, int numsSize){
int cnt = 0;
for (int i = 1; i < numsSize && cnt < 2; i++) {
if (nums[i] >= nums[i - 1]) {
continue;
}
cnt++;
if (i >= 2 && nums[i] < nums[i - 2]) {
nums[i] = nums[i - 1];
}
else {
nums[i - 1] = nums[i];
}
}
return cnt <= 1 ? true : false;
}
53. 最大子序和
int maxSubArray(int* nums, int numsSize)
{
int sum = nums[0];
int tmp = 0;
for (int i = 0; i < numsSize; i++) {
tmp += nums[i];
if (tmp > sum) {
sum = tmp;
}
if (tmp < 0) {
tmp = 0;
}
}
return sum;
}
763. 划分字母区间
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* partitionLabels(char * S, int* returnSize)
{
int map[26] = {0};
int len = strlen(S);
int i;
for(i = len - 1; i >= 0; i--) {
if(!map[S[i] - 'a']) {
map[S[i] - 'a'] = i;
}
}
int* res = (int*)malloc(sizeof(int) * len);
*returnSize = 0;
int start, end, count;
start = end = 0;
while(S[start]) {
count = 0;
for(i = start; i <= end; i++) {
count++;
if(map[S[i] - 'a'] > end){
end = map[S[i] - 'a'];
}
}
res[(*returnSize)++] = count;
start = end = i;
}
return res;
}