LeetCode 五月打卡-day09
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day09相关的知识,希望对你有一定的参考价值。
参考题解:https://leetcode.cn/problems/di-string-match/solution/by-nehzil-lc77/
贪心思想:
先来了解一下「贪心算法」的问题需要满足的条件:
最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较大的问题的解只由其中一个规模较小的子问题的解决定;
无后效性:后面阶段的求解不会修改前面阶段已经计算好的结果;
贪心选择性质:从局部最优解可以得到全局最优解。
因为 I 和 D 决定了 前后位置的大小关系,按照贪心算法的思想,每次根据 I 或 D 选取 T 中最小或最大的数字,如果已经使用过的去掉,从没用过的里面选。具体步骤如下:
用两个指针来保存当前 T 中的 最大值max 和最小值min ;
遍历字符串
如果 s[i]=‘I’,那么令 result[i] 为剩余数字中的最小数;
如果 s[i]=‘D’,那么令 result[i] 为剩余数字中的最大数。
最后一个数,填入 result[n] 中;
返回结果 result。
class Solution
public int[] diStringMatch(String s)
char[] a = s.toCharArray();
int[] arr = new int[(s.length()+1)];
int min = 0;
int max = a.length;
for(int i=0;i<s.length();i++)
if(a[i] == 'I')
arr[i]=min;
min++;
else
arr[i]=max;
max--;
arr[s.length()]=max;
return arr;
以上是关于LeetCode 五月打卡-day09的主要内容,如果未能解决你的问题,请参考以下文章