线性枚举题集


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

题目链接:1464. 数组中两元素的最大乘积

int max(int a, int b) {
    if (a > b)
        return a;
    else 
        return b;
}

int maxProduct(int* nums, int numsSize){
    int i, j, answer;

    answer = 0;
    for (i = 0; i < numsSize; i++) {
        for (j = i + 1; j < numsSize; j++) {
            answer = max(answer, (nums[i] - 1) * (nums[j] - 1));
        }
    }
    return answer;
}

485. 最大连续 1 的个数

题目链接:485. 最大连续 1 的个数

int max(int a, int b) {
    if (a > b)
        return a;
    else
        return b;
}

int findMaxConsecutiveOnes(int* nums, int numsSize){
    int i, answer, count0;

    answer = count0 = 0;
    for (i = 0; i < numsSize; i++) {
        if (nums[i] == 1) {
            count0++;
        } else {
            answer = max(answer, count0);
            count0 = 0;
        }
    }
    return max(answer, count0);
}

153. 寻找旋转排序数组中的最小值

题目链接:153. 寻找旋转排序数组中的最小值

int min(int a, int b) {
    if (a < b)
        return a;
    else 
        return b;
}

int findMin(int* nums, int numsSize){
    int i, answer;

    answer = 5010;
    for (i = 0; i < numsSize; i++)
        answer = min(answer, nums[i]);
    return answer;
}

154. 寻找旋转排序数组中的最小值 II

题目链接:154. 寻找旋转排序数组中的最小值 II

int min(int a, int b) {
    if (a < b)
        return a;
    else 
        return b;
}

int findMin(int* nums, int numsSize){
    int i, answer;

    answer = 5010;
    for (i = 0; i < numsSize; i++)
        answer = min(answer, nums[i]);
    return answer;
}

628. 三个数的最大乘积

题目链接:628. 三个数的最大乘积

因为有正负数同时存在,所以两边不一定是最大值。

int cmp(const void *a, const void *b) {
    int x, y;
    
    x = *(int *)a, y = *(int *)b;
    if (x < y) return -1;
    else if (x > y) return 1;
    else return 0;
}

int rcmp(const void *a, const void *b) {
    return -cmp(a, b);
}

int max(int a, int b) {
    if (a > b)
        return a;
    else 
        return b;
}

int maximumProduct(int* nums, int numsSize){
    int i, answer;

    qsort(nums, numsSize, sizeof(int), cmp);
    answer = -1e9;
    for (i = 2; i < numsSize; i++)
        answer = max(answer, nums[0] * nums[1] * nums[i]);
    for (i = numsSize - 3; i >= 0; i--)
        answer = max(answer, nums[numsSize - 1] * nums[numsSize - 2] * nums[i]);
    return answer;
}

2091. 从数组中移除最大值和最小值

题目链接:2091. 从数组中移除最大值和最小值

int min(int a, int b) {
    if (a < b)
        return a;
    else 
        return b;
}

int minimumDeletions(int* nums, int numsSize){
    int i, mx, lmx, rmx, mn, lmn, rmn, answer;

    mx = 1e9;
    for (i = 0; i < numsSize; i++)
        if (nums[i] < mx)
            mx = nums[i], lmx = i;
    mx = 1e9;
    for (i = numsSize - 1; i >= 0; i--)
        if (nums[i] < mx)
            mx = nums[i], rmx = i;
    mn = -1e9;
    for (i = 0; i < numsSize; i++)
        if (nums[i] > mn)
            mn = nums[i], lmn = i;
    mn = -1e9;
    for (i = numsSize - 1; i >= 0; i--)
        if (nums[i] > mn)
            mn = nums[i], rmn = i;
    answer = numsSize;
    if (lmx >= rmn)
        answer = min(answer, min(lmx + 1, numsSize - rmn));
    else 
        answer = min(answer, lmx + 1 + numsSize - rmn);
    if (lmn >= rmx)
        answer = min(answer, min(lmn + 1, numsSize - rmx));
    else
        answer = min(answer, lmn + 1 + numsSize - rmx);
    return answer;
}

2656. K 个元素的最大和

题目链接:2656. K 个元素的最大和

int cmp(const void *a, const void *b) {
    int x, y;
    
    x = *(int *)a, y = *(int *)b;
    if (x < y) return -1;
    else if (x > y) return 1;
    else return 0;
}

int maximizeSum(int* nums, int numsSize, int k){
    int x, answer, i;

    qsort(nums, numsSize, sizeof(int), cmp);
    x = nums[numsSize - 1];
    answer = 0;
    for (i = 0; i < k; i++)
        answer += x + i;
    return answer;
}

LCP 06. 拿硬币

题目链接:LCP 06. 拿硬币

int minCount(int* coins, int coinsSize){
    int count, i;

    count = 0;
    for (i = 0; i < coinsSize; i++)
        count += (coins[i] + 1) / 2;
    return count;
}

2057. 值相等的最小索引

题目链接:2057. 值相等的最小索引

int smallestEqual(int* nums, int numsSize){
    int i, answer;

    answer = -1;
    for (i = numsSize - 1; i >= 0; i--)
        if (i % 10 == nums[i])
            answer = i;
    return answer;
}

2149. 按符号重排数组

题目链接:2149. 按符号重排数组

int* rearrangeArray(int* nums, int numsSize, int* returnSize){
    int *a;
    int i, j, k;

    a = (int *) malloc(numsSize * sizeof(int));
    for (i = 0, j = 0, k = 0; i < numsSize; i++) {
        while (j < numsSize && nums[j] < 0) j++;
        while (k < numsSize && nums[k] > 0) k++;
        if (i % 2 == 0) {
            a[i] = nums[j++];
        } else {
            a[i] = nums[k++];
        }
    }
    *returnSize = numsSize;
    return a;
}

2125. 银行中的激光束数量

题目链接:2125. 银行中的激光束数量

class Solution {
    public int numberOfBeams(String[] bank) {
        int answer = 0, last = 0;
        for (int i = 0; i < bank.length; i++) {
            int now = 0;
            for (int j = 0; j < bank[i].length(); j++) {
                if (bank[i].charAt(j) == '1') {
                    now += 1;
                }
            }
            if (now == 0) {
                continue;
            }
            answer += last * now;
            last = now;
        }
        return answer;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值