题目给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入:s = "bcabc" 输出:"abc"示例 2:输入:s = "cbacdcbc" 输出:"acdb"提示:1 <= s.length <= 104 s 由小写英文字母组成思路首先要搞清楚什么是字典序?顾名思义,是按照字典顺序排序。abcd...就是字典序。在这个顺序下,a<b<c<d。如果是多个字符,比如abcd和acbd这两个字符串,其字典序是abcd<acbd。从第一位开始比,如果相等则比较第二位,直到字符串的末尾。如果有重复字符,删除不同位置的字符,会得到不同的结果。答案就是所有结果中字典序最小的。那怎么删呢?重复的字符所在位置有两种:一是相邻,二是不相邻,中间有其他的字符。相邻的重复字符,保留第一个,后面的全删掉就好。不相邻的字符,有两种选择,删前和删后。如果中间的字符比重复字符大,此时前面的重复字符和中
题目给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例 1:输入:nums = [10,2] 输出:"210"示例 2:输入:nums = [3,30,34,5,9] 输出:"9534330"提示:1 <= nums.length <= 100 0 <= nums[i] <= 109思路如果是只有一位的数,那直接比较大小,大数放在高位就行了。现在不光有一位的还有两位的,三位的。比如[3,30]。不光有多位,还会多位的高位和少位的高位相等的情况。当出现这种情况就不好去比较了。[3,30]可以组合成330和303。当然是取330。3和34组合334和343,取343。目前看可以根据两个数组合结果的大小来排序。从大到小排序,然后拼接成字符串。代码class Solution { public: string largestNumber(vector<int> &nums) { /
题目n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。 示例 1:输入:ratings = [1,0,2] 输出:5 解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。示例 2:输入:ratings = [1,2,2] 输出:4 解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。 第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。思路相邻两个孩子评分更高的孩子会获得更多的糖果,假设A、B是两个相邻的孩子,A在左边,B在右边。评分更高就会有两种情况,一是A<B,二是A>B。覆盖这两种情况,就可以满足相邻两个孩子评分更高的孩子会获得更多的糖果的规则。怎么覆盖呢?对于A<B的情况,从左到右遍历数组,依次看相邻两个数的小于情况,如果满足A<B,则令B的糖果比A的多一个,否则只给B一个糖果。对于A>B,从左到右遍历
题目在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。示例 1:输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2] 输出: 3 解释: 从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油 开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油 开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油 开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油 开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油 开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。 因此,3 可为起始索引。示例 2:输入: gas =
题目给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。示例 1:输入:prices = [7,1,5,3,6,4] 输出:7 解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。 总利润为 4 + 3 = 7 。示例 2:输入:prices = [1,2,3,4,5] 输出:4 解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。 总利润为 4 。示例 3:输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 交