861. 翻转矩阵后的得分

思路:

行首的权值最大,故首先将其置1;

每列由于权值相同,故只需要将0多于1的情况反转即可

763. 划分字母区间

思路:

1.计算每个字母的最右边界下标,并记录到新数组中

2.通过遍历原数组,当下标与当前的最右边界相等时,即表示当前字母可以覆盖前面所有字母的最右边界;

划分出新区间,同时当前的下标更新为新区间的左边界

122. 买卖股票的最佳时机 II

思路:

每当后面的数比前一个数大,就将其差价加到利润中

765. 情侣牵手

思路:

确定对应的情侣数(0对1,2对3,,,),查找并将其替换

860. 柠檬水找零

思路:

  判断是否为5,10,20;是则按数量找零,零钱不够时返回false

  1. bool lemonadeChange(int* bills, int billsSize) {
  2. int i,j,k;
  3. int use[+] = {,,,,};
  4. for (i = ; i < billsSize ; i ++)
  5. {
  6. switch(bills[i])
  7. {
  8. case :
  9. use[]++;break;
  10. case :
  11. use[]++;
  12. if (use[]>)
  13. use[]--;
  14. else
  15. return false;
  16. break;
  17. case :
  18. use[]++;
  19. if (use[]>)
  20. {
  21.  
  22. if (use[]>)
  23. {
  24. use[]--,use[]--;
  25. }
  26. else if (use[]>)
  27. {
  28. use[] -= ;
  29. }
  30. else
  31. return false;
  32. }
  33. else
  34. return false;
  35. break;
  36. default:return false;
  37. }
  38. }
  39.  
  40. return true;
  41. }

455. 分发饼干

思路:

  先对饼干大小及小孩胃口做降序排列,然后将两者做比较,使用饼干尽可能满足多的小孩

  1. int findContentChildren(int* g, int gSize, int* s, int sSize) {
  2. int i,j,k,res = ;
  3.  
  4. //对孩子胃口及饼干大小做降序排列
  5. for (i = ; i < gSize ; i ++)
  6. {
  7. k = i;
  8. for (j=i+; j < gSize ; j ++)
  9. {
  10. if (g[j] > g[k])
  11. k = j;
  12. }
  13. if (i != k)
  14. {
  15. g[i] = g[i] ^ g[k];
  16. g[k] = g[i] ^ g[k];
  17. g[i] = g[i] ^ g[k];
  18. }
  19. }
  20. for (i = ; i < sSize ; i ++)
  21. {
  22. k = i;
  23. for (j=i+; j < sSize ; j ++)
  24. {
  25. if (s[j] > s[k])
  26. k = j;
  27. }
  28. if (i != k)
  29. {
  30. s[i] = s[i] ^ s[k];
  31. s[k] = s[i] ^ s[k];
  32. s[i] = s[i] ^ s[k];
  33. }
  34. }
  35.  
  36. //饼干尽可能得满足小孩
  37. for (i=j=; i<gSize && j<sSize ; )
  38. {
  39. if (s[j]>=g[i])
  40. {
  41. i++,j++;
  42. res ++;
  43. }
  44. else
  45. i++;
  46. }
  47.  
  48. return res;
  49. }

621. 任务调度器

思路:

题意要求不同的任务(字母)间必须有n长度的冷却时间,

1.当n=0时:最短时间即为任务的总长度

2.当n>0时

我们先找出数量最多的任务,即可确定大致的最短时间(n+1)*(max-1)

  然后查找是否还有任务的个数是与max相同,个数初始i=1

  最后得到总长度:(n+1)*(max-1)+i

  1. #define MAX(X,Y) X>Y?X:Y
  2. int leastInterval(char* tasks, int tasksSize, int n) {
  3. int i,j,k;
  4. int arr[];
  5. memset(arr,,sizeof(arr));
  6.  
  7. //计算各任务的个数
  8. for (i = ; i < tasksSize ; i ++)
  9. arr[tasks[i]-'A'] ++;
  10.  
  11. //降序处理
  12. for (i = ; i < ; i ++)
  13. {
  14. k = i;
  15. for (j = i+ ; j < ; j ++)
  16. if (arr[j] > arr[k])
  17. k = j;
  18. if (k!=i)
  19. {
  20. arr[i] = arr[i] ^ arr[k];
  21. arr[k] = arr[i] ^ arr[k];
  22. arr[i] = arr[i] ^ arr[k];
  23. }
  24. }
  25.  
  26. //计算最短时间
  27. for (i=; i< ; i ++)
  28. if (arr[i] != arr[])
  29. break;
  30.  
  31. return MAX((arr[]-)*(n+)+i,tasksSize);
  32. }

134. 加油站

思路:

先处理数据得到一组加油耗油后的数据

 1.若处理后的数据总和为负数,车必然不能运行,返回-1

2.分别以非负数为起点,遍历一圈看其能否回到原点

  1. int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {
  2. int i,j,k,res = -;
  3. int use[gasSize];
  4. memset(use,,sizeof(use));
  5.  
  6. k = ;
  7. //处理得到加油耗油后的数据
  8. for (i = ; i < gasSize ; i ++)
  9. {
  10. use[i] = gas[i]-cost[i];
  11. k += use[i];
  12. }
  13.  
  14. //剩余油量不能为负数
  15. if (k>=)
  16. {
  17. for (i = ; i < gasSize ; i ++)
  18. {
  19. //以非负数为起点
  20. if (use[i]>=)
  21. {
  22. k = use[i];
  23. //遍历一圈看其能否回到原点
  24. for (j=(i+)%gasSize ; j!=i && k> ; j=(j+)%gasSize)
  25. k += use[j];
  26. if (k>= && j==i)
  27. return i;
  28. }
  29. }
  30. }
  31.  
  32. return res;
  33. }

优化代码:

  1. int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {
  2. int i,totol,sum,start;
  3. totol = sum = start = ;
  4. for (i = ; i < gasSize ; i ++)
  5. {
  6. totol += gas[i]-cost[i];
  7. sum += gas[i]-cost[i];
  8. if (sum<)
  9. {
  10. sum = ;
  11. start = i+;
  12. }
  13. }
  14.  
  15. return totol<?-:start;
  16. }

leedcode_贪心算法系列的更多相关文章

  1. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

  2. 简答一波 HashMap 常见八股面试题 —— 算法系列(2)

    请点赞,你的点赞对我意义重大,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注 ...

  3. 算法导论----贪心算法,删除k个数,使剩下的数字最小

    先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...

  4. LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]

    Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...

  5. ACM_ICPC hdu-2111(简单贪心算法)

    一道非常简单的贪心算法,但是要注意输入的价值是单位体积的价值,并不是这个物品的总价值!#include <iostream> #include <stdio.h> #inclu ...

  6. 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题

    1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...

  7. 增强学习贪心算法与Softmax算法

    (一) 这个算法是基于一个概率来对探索和利用进行折中:每次尝试时,以概率进行探索,即以均匀概率随机选取一个摇臂,以的概率进行利用,即以这个概率选择当前平均奖赏最高的摇臂(如有多个,则随机选取). 其中 ...

  8. JAVA算法系列 冒泡排序

    java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...

  9. JAVA算法系列 快速排序

    java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...

随机推荐

  1. 【leetcode】67-AddBinary

    problem AddBinary code class Solution { public: string addBinary(string a, string b) { string res; ; ...

  2. angular file change

    AngularJs: How to check for changes in file input fields? <input type="file" onchange=& ...

  3. grep 的学习 正则

    grep 命令: grep  "name"   /path/file_name    从file_name文件中中查找 name 字符 grep  -c    "name ...

  4. git使用之放弃本地修改

    一,未使用 git add 缓存代码时. 可以使用 git checkout  --  filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “-- ...

  5. 静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了。

    1.静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了.1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值.2.构 ...

  6. LeetCode – Group Shifted Strings

    Given a string, we can "shift" each of its letter to its successive letter, for example: & ...

  7. Android 播放内部mp3音乐

    private void heartSound() { try { AssetManager am = getAssets();//获得该应用的AssetManager AssetFileDescri ...

  8. linux网络编程概念(一)

    AF表示地址族(address family) PF表示协议族(protocol family) domain参数 AF_UNIX 内核中通信 sockaddr_un AF_INET 通过ipv4 s ...

  9. Tomcat环境变量配置命令行报错:The JRE_HOME environment variable is not defined correctl This environment variable is needed to run this program

    1. tomcat——>bin——>setclasspath.bat,使用记事本打开. 2. 添加如下代码即可: 为自己实际的环境变量配置为准!!! set JAVA_HOME=D:\ID ...

  10. 填充整个区间(fill,fill_n,generate和generate_n)

    fill 将value值填充整个区间,不能为OutputIterator,因为fill会用到first和last,outputIterator无法做相等的测试 template <class F ...