https://leetcode.com/contest/leetcode-weekly-contest-16a/problems/find-permutation/

设原本的数字是0,那么按照它的DI来模拟,D就减1,I就+1

比如DDIIDI,就是0、-1、-2、-1、0、-1、0

那么找到第一个最小的,现在是-2,那么把它安排去第一个没出现过的数字,也就是1了,

然后,它左边的全部,就要确定了,3、2、1

然后再把[4, en]继续这样模拟。

需要注意的是,遇到一个I,就马上停止了,不然DDDIIIIDDDDDDDDDDD这样 的数据会hack。其实停止也很正常,也就是因为是上升了,是有很多种情况的,首先把前面的贪心优先字典树最小后再说,I的话,可以设置成很大也没问题,字典序已经是最有了。

class Solution {
public:
vector<int> findPermutation(string s) {
vector<int> t;
vector<int> ans;
ans.push_back();
t.push_back();
for (int i = ; i < s.size(); ++i) {
if (s[i] == 'D') t.push_back(t[i] - );
else t.push_back(t[i] + );
ans.push_back();
}
int want = ;
int be = , en = t.size() - ;
while (want <= s.size() + ) {
int pos = tofind(t, be, en);
for (int i = pos; i >= be; --i) {
ans[i] = want++;
}
be = pos + ;
}
return ans;
}
int tofind(vector<int> &num, int be, int en) {
int now = 1e9;
int id = be;
for (int i = be; i <= en; ++i) {
if (i - >= be && num[i] > num[i - ]) return id;
if (now > num[i]) {
id = i;
now = num[i];
}
}
return id;
}
};

最新文章

  1. JS高程5.引用类型(4)Array类型的各类方法
  2. Hibernate--------八大类HQL查询集合
  3. 4.View绘制分析笔记之onDraw
  4. PHP如何通过CURL上传文件
  5. Storm-源码分析- Storm中Zookeeper的使用
  6. WPF读写config配置文件
  7. raphael绘制矢量图2
  8. ci获取当前url链接的分组,控制器,方法
  9. Java8 Stream API
  10. 重新学习struts
  11. 20160410javaweb 开发小案例 --客户管理系统
  12. 1、安卓数据存储机制——sharedPreference
  13. 区分 点操作符+属性名 和 getAttribute()
  14. Docker OpenvSwitch 应用部署
  15. 浅谈Windows用户帐户控制(User Account Control,UAC)
  16. 【linux】之内核升级
  17. uiautomator 代码记录 : BT发送测试
  18. android make-standalone-toolchain.sh 使用说明
  19. selenium安装浏览器驱动
  20. android studio run得时候 选择开启对话框

热门文章

  1. C++MFC编程笔记day06 MFC向导、MFC画图类使用
  2. BestCoder #49 Untitled HDU 5339
  3. [IT学习]GIT 学习
  4. BAPI 关闭和删除PR
  5. SoapUI中读取Office365邮件
  6. mysql12----explain
  7. regular expression 在线检测的网站
  8. POJ - 3177 Redundant Paths(边双连通分支)(模板)
  9. yii2.0 ActiveRecord 查询汇总
  10. idea把项目提交到svn服务器步骤