贪心算法初步学习

简介: 贪心算法初步学习

文章目录

image.png

int main()
{
  int arr[10] = { 2,34,6,67,33,47,56,567,1,4 };
  heapsort(arr, 10);
  int max = 207;
  int n = 0, sum = 0;
  for (int i = 0; i < 10; i++)
  {
    if (sum > max)
    {
      break;
    }
    sum += arr[i];
    n++;
  }
  printf("%d ", n);
  return 0;
}

种花问题

image.png

```c
int main()
{
  int arr[5] = { 1,0,0,0,1 };
  int n = 1;
  int i = 0;
  int count = 0;
  for (i = 0; i < 5; )
  {
    if (arr[i] == 1)//遇到花就跳两格
    {
      i += 2;
    }
    else if (arr[i - 1] == 1 && i > 0)//不是花,但是他前面有花且不是第一个,跳1格
    {
      i += 1;
    }
    else if (arr[i + 1] == 1 && i+1<5)//不是花,但他后面有花,且不是最后一个,跳3格
    {
      i += 3;
    }
    else//前后都没花
    {
      arr[i] = 1;
      i += 2;//跳两格
      count++;
      if (count == n)
      {
        printf("yes");
      }
    }
  }
  return 0;
}

小行星碰撞

image.png

2 <= asteroids.length <= 104
-1000 <= asteroids[i] <= 1000
asteroids[i] != 0
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
//正数往右走,负数往左走
#include<math.h>
int* asteroidCollision(int* asteroids, int asteroidsSize, int* returnSize)
{
  int n = 0;
  while (1)
  {
    int prev = 0;
    int next = 1;
    //每次都重左到右扫描一遍
    while (next < asteroidsSize)// 每次只消一个,这个循环是把所有的都消掉,能够保证两者除0外都挨着
    {
      if (asteroids[prev] * asteroids[next] < 0)
      {
        //1.背靠背不能碰撞
        //如-9 8 32 9
        //如-9 0 8 9//我们不能够让前后都往后走一步,因为0是有隐患的,我们不走0
        //prev          next
        //          prev        next
        //-9     0      8      9
        if (asteroids[prev] < 0)//前面的往前走,后面的往后走就不符合
        {
          prev = next;
          next++;
        //背靠背不能再碰了,就进入下一个循环
          continue;
        }
        //发生了碰撞,左边大
        if (abs(asteroids[prev]) > abs(asteroids[next]))
        {
          asteroids[next]=0;
          n++;
        }
        if (abs(asteroids[prev]) < abs(asteroids[next]))
        {
          asteroids[prev] = 0;
          n++;
        }
        if (abs(asteroids[prev]) == abs(asteroids[next]))
        {
          asteroids[next] = 0;
          asteroids[prev] = 0;
          n+=2;
        }
        break;//贪心不贪婪
      }
      //如果前后相乘为0
      //0  3,左边的等于0
      if (asteroids[prev] == 0)
      {
        prev = next;
        next++;
      }
      //如果前后相乘为0
      //3  0,右边的等于0
      if (asteroids[next] == 0)//左边不动
      {
        next++;
      }
      else
      {
        //prev  next
        //7 0 0 4 -2
        //方向相同,就前进一步
        prev = next;//要跨过0
        next++;
      }
    }
    //出来了,next就大于size了
    if (next > asteroidsSize)
    {
      break;
    }
  }
  *returnSize = asteroidsSize - n;//返回剩余的
  int *ret = (int *)malloc(sizeof(int)*(asteroidsSize - n));
  int i,j=0;
  for (i = 0; i < asteroidsSize; i++)
  {
    if (asteroids[i])
    {
      ret[j++] = asteroids[i];
    }
  }
  return ret;
}
相关文章
|
3月前
|
存储 算法
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
这篇文章详细介绍了图的概念、表示方式以及深度优先遍历和广度优先遍历的算法实现。
77 1
数据结构与算法学习二二:图的学习、图的概念、图的深度和广度优先遍历
|
6天前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
63 11
架构学习:7种负载均衡算法策略
|
2月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
140 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
3月前
|
算法
动态规划算法学习三:0-1背包问题
这篇文章是关于0-1背包问题的动态规划算法详解,包括问题描述、解决步骤、最优子结构性质、状态表示和递推方程、算法设计与分析、计算最优值、算法实现以及对算法缺点的思考。
145 2
动态规划算法学习三:0-1背包问题
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

热门文章

最新文章