负数转化为正数,不一定会得到最大值,而是要将绝对值比正数大的值变为正值,如果绝对值比正数小,则应该对它进行连续取反,才会得到最大值 例:-1变为1之后,2变-2比1变为-1得到的值要小,所以应该继续调整-1。设置下标在这个位置不动,不断修改-1即可。 当题目中限制是两个维度时,比如既要求了这个又要求了那个,那就需要先确定一个维度,先按一个要求来处理数据,然后在此基础上考虑第二个维度。 跳跃问题就是区间覆盖问题,不用考虑每次跳多少个,因为题目没让给出每次跳几个,遍历时的终止条件时覆盖区间的大小,每次修改覆盖区间,当在覆盖区间内满足条件时,即找到结果,如果遍历到覆盖区间为0,返回失败。 区间问题基本上都需要先排序,实现的需求一般就是要用最少的代价满足最多的条件,比如一根箭射尽可能多的气球,最后所需要的箭就是最少的,然后依靠作区间或右区间来进行分析,需要一个最小区间值来获得满足条件的最大结果。 按字符出现位置划分区间,就要找到该字符最后出现的位置,第一次遍历统计每个字符最后出现的位置,再从头遍历,每次更新最大的出现位置,找到字符下标与最大出现位置相同的即为一个分割点。