栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode——贪心题 c语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode——贪心题 c语言

一  、1221. 分割平衡字符串

在一个 平衡字符串 中,'L' 和 'R' 字符的数量是相同的。

给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。

注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。

返回可以通过分割得到的平衡字符串的 最大数量 。

int balancedStringSplit(char * s){
    int ret=0;
    int cout=0;
    for(int i=0;i 

思路:定义一个cout 记录L(+1) R(-1) 因为为最大数量 每当 cout 为0时 说明平衡 则可以ret++。

二 、1217. 玩筹码

有 n 个筹码。第 i 个芯片的位置是 position[i] 。

我们需要把所有筹码移到同一个位置。在一步中,我们可以将第 i 个芯片的位置从 position[i] 改变为:

position[i] + 2 或 position[i] - 2 ,此时 cost = 0
position[i] + 1 或 position[i] - 1 ,此时 cost = 1
返回将所有筹码移动到同一位置上所需要的 最小代价 。

int minCostToMoveChips(int* position, int positionSize){
    int ret;
    int min=100000;
    for(int i=0;iret) min=ret;
}
        return min;
}

思路:我是这样理解的 首先你只要是我的偶数倍就不需要付出代价 所以可以随便在偶数倍上移动移动。奇数同理移动但肯定要付出代价,那么 就可以遍历 所有数组 每个元素作为初值的最小代价。

三 、1029. 两地调度

公司计划面试 2n 人。给你一个数组 costs ,其中 costs[i] = [aCosti, bCosti] 。第 i 人飞往 a 市的费用为 aCosti ,飞往 b 市的费用为 bCosti 。

返回将每个人都飞到 a 、b 中某座城市的最低费用,要求每个城市都有 n 人抵达。

输入:costs = [[10,20],[30,200],[400,50],[30,20]]
输出:110
解释:
第一个人去 a 市,费用为 10。
第二个人去 a 市,费用为 30。
第三个人去 b 市,费用为 50。
第四个人去 b 市,费用为 20。

最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。

int twoCitySchedCost(int** costs, int costsSize, int* costsColSize){
    int ret=0;
    for(int i=0;i(costs[j+1][1]-costs[j+1][0])){
                int t=costs[j+1][0],y=costs[j+1][1];
                costs[j+1][0]=costs[j][0]; costs[j][0]=t;
                 costs[j+1][1]=costs[j][1]; costs[j][1]=y;

            }
        }
    }
    for(int i=0;i 

思路: 先理解题的意思 a b两地都需要去n个人;要求最小的费用,用一个元素b-a的费用差,用来排序 说明 b相比后面之后一半的b 性价更高,所以前一半加b,后一半加a。

四 、面试题 10.11. 峰与谷

在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。

int comp(const void*a,const void*b){
    return *(int *)a<*(int *)b;
}
void wiggleSort(int* nums, int numsSize){
    int s[100000];
    qsort(nums,numsSize,sizeof(int),comp);
    int l=0,r=numsSize-1,i=0;
    while(l 

思路 : 首先将其从小到大的排序, 再建立一个数组,用两个指针分别指向开头,结尾(用以交替峰谷)当 l==r 时 就将最后一个值输入,再遍历输出.

望大家指正...

来自 英雄哪里出来的指导.

所有题来自 leetcode ...

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951874.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号