796
简单的字符串操作
797
深度优先搜索
非常简洁的实现,还是要学习的
简洁之处:
没有使用我全局定义的 ans
和 path
ans 和path 在这种情境下被统一起来,最终也没有进行回退,每一次都是新的拷贝创建

class Solution(object):def allPathsSourceTarget(self, graph):N = len(graph)def solve(node):if node == N-1: return [[N-1]]ans = []for nei in graph[node]:for path in solve(nei):ans.append([node] + path)return ansreturn solve(0)

798
最小旋转最大得分
计算初始分数,在每个旋转点时的得分和失分
如果直接(对于每一个位置算一边,但是注意到相邻的位置实际上大量的重复)进行统计比较麻烦的话,采取这种算边际损失量的方法不失为一种好方法

class Solution {
private:int n;int in[20001];int out[20001];void pro(int k,int i){if(k>i){in[i+1]++;out[i+n-k+1]++;}else {in[i+1]++;out[i-k+1]++;}}
public:int bestRotation(vector<int>& A) {memset(in,0,sizeof(in));memset(out,0,sizeof(out));n=A.size();for(int i=0;i<n;i++){pro(A[i],i);}  int s=0;int bests=-1;int besti=-1;
//      int besti=0;for(int i=0;i<n;i++){if(A[i]<=i){s++;}}if(bests<s){bests=s;besti=0;}for(int i=1;i<n;i++){s+=in[i];s-=out[i];if(bests<s){bests=s;besti=i;}}return besti;}
};

附 我的naive 思路没有问题 但是有更好的解决方法
五行解决问题

    int bestRotation(vector<int>& A) {int N = A.size();int change[N] = {0};for (int i = 0; i < N; ++i) change[(i - A[i] + 1 + N) % N] -= 1;for (int i = 1; i < N; ++i) change[i] += change[i - 1] + 1;return distance(change, max_element(change, change + N));}

我还是有几个关键的点没有观察到

  • k++时会且仅会多得一分
  • 而且减分的时候 都是index 和 value 的差值加1 最后取正模就好
  • 不用计算初始的分值,只用计算中途
  • 加分过程与累计合并,简化代码
  • 累积起来以后用 max_element得到最大一个只对应的迭代器,使用distance 得到迭代器 也就是需要的代码
    java
  public int bestRotation(int[] A) {int N = A.length;int change[] = new int[N];for (int i = 0; i < N; ++i) change[(i - A[i] + 1 + N) % N] -= 1;int max_i = 0;for (int i = 1; i < N; ++i) {change[i] += change[i - 1] + 1;max_i = change[i] > change[max_i] ? i : max_i;}return max_i;}

python

   def bestRotation(self, A):N = len(A)change = [1] * Nfor i in range(N): change[(i - A[i] + 1) % N] -= 1for i in range(1, N): change[i] += change[i - 1]return change.index(max(change))

python中 [1] *N 的用法也是我不会的。(批量初始化

799
倒水,但是考虑问题的时候总是想递归的进行,跟随时间进行,
实际上没有必要,直接按照总量的水溢出问题就会简单许多,问题虽然是和时间高度相关的,但是最后的问题所在没有与时间相关,于是可以直接计算终态

class Solution {
private:double w[102][102];
public:double champagneTower(int poured, int query_row, int query_glass) {memset(w,0,sizeof(w));w[0][0]=poured;bool flag=true;int  row=0;double ans=0;while(flag){if(row==query_row){ans=w[row][query_glass];break;}flag=false;for(int i=0;i<=row;i++){if(w[row][i]>1){w[row+1][i]+=(w[row][i]-1)/2;w[row+1][1+i]+=(w[row][i]-1)/2;flag=true;}}row++;}return ans>1?1:ans; }
};

Python的快速解决方案

class Solution(object):def champagneTower(self, poured, query_row, query_glass):A = [[0] * k for k in xrange(1, 102)]A[0][0] = pouredfor r in xrange(query_row + 1):for c in xrange(r+1):q = (A[r][c] - 1.0) / 2.0if q > 0:A[r+1][c] += qA[r+1][c+1] += qreturn min(1, A[query_row][query_glass])

转载于:https://www.cnblogs.com/sfzyk/p/8544910.html

leetcode 75相关推荐

  1. LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)

    LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...

  2. 【排序】LeetCode 75. Sort Colors

    LeetCode 75. Sort Colors Solution1: 参考自:<leetcode-cpp 答案> 由于0,1,2非常紧凑,首先想到计数排序(counting sort), ...

  3. LeetCode - 75 颜色分类

    给定一个包含红色.白色和蓝色.共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  4. [LeetCode]75.Sort Colors

    [题目连接] 75.Sort Colors [题目] Given an array with n objects colored red, white or blue, sort them so th ...

  5. LeetCode 75. Sort Colors--Python解法

    题目地址:Sort Colors - LeetCode Given an array with n objects colored red, white or blue, sort them in-p ...

  6. leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)

    题目 https://leetcode.com/problems/sort-colors/ 题解 快速排序3.0(随机快排+荷兰国旗技巧优化) 在arr[L-R]范围上,进行快速排序的过程: 1)在这 ...

  7. leetcode —— 75. 颜色分类

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  8. LeetCode 75. 颜色分类(Sort Colors)

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

  9. Leetcode 75. 颜色分类 (每日一题 20210817)

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色.示例 ...

  10. LeetCode 75 Sort Colors(颜色排序)

    翻译 给定一个包括红色.白色.蓝色这三个颜色对象的数组.对它们进行排序以使同样的颜色变成相邻的,其顺序是红色.白色.蓝色.在这里,我们将使用数字0.1和2分别来代表红色.白色和蓝色. 原文 Given ...

最新文章

  1. K3ERP连接数据库问题
  2. Nginx 作为web server 的优化要点
  3. CtStatement
  4. Spring Cloud构建微服务架构:服务消费(基础)
  5. WordPress Terillion Reviews插件HTML注入漏洞
  6. 【Qt】Qt下载教程
  7. 【CF#468 div2 D. 】Peculiar apple-tree(思维)
  8. C++ 标准库 vector list map使用方法
  9. linux ftp用户指定多个目录,linux ftp服务器下用户限制目录的方法
  10. [W班]第二次结对作业成绩评价
  11. 安装eclipse的JRebel6.4.3的插件
  12. 71. 尽早刷新文档的输出
  13. 烧脑又走心,CCF BDCI大赛这波儿操作有点赞!
  14. 安装torchsnooper、convokit、entmax库
  15. centos7 安装 卸载docker
  16. java算法竞赛入门经典_算法竞赛入门经典笔记(1-3章)
  17. 关于扫雷的c语言程序设计,C语言程序设计扫雷游戏实验报告
  18. [转] 公务员80分申论万能模板(转给需要的人)
  19. 做什么样的软件才能赚钱? 学什么样的知识才能赚钱? 肖舸老师
  20. Windows10+CentOS 7 双系统安装

热门文章

  1. 去哪儿-10-city-ajax
  2. PyTorch 搭建神经网络 (MNIST)[含注释]
  3. 外参矩阵(旋转矩阵+平移向量)以及外方位元素的关系
  4. Unity uGui RawImage 渲染小地图
  5. 122 - Trees on the level(模拟内存池解法)
  6. 一个简单的PHP邮件列表管理器
  7. 从0开始详解 Johnson 全源最短路(P5905 【模板】Johnson 全源最短路)
  8. VS code 调试配置01 Debugging
  9. CloudCompare离线帮助文档
  10. matlab历史指示穿作用,重新学习MATLAB——相见恨晚的重要应用技巧