Zheaoli / do-something-right

MIT License
37 stars 3 forks source link

2022-08-08 #323

Open Zheaoli opened 2 years ago

Zheaoli commented 2 years ago

2022-08-08

SaraadKun commented 2 years ago

761. 特殊的二进制序列

class Solution {
    public String makeLargestSpecial(String s) {
        //参考合法的括号,只有(),(()),(()())三种形式,三种括号可以互相交换位置保持合法;
        //而(()())去掉外层()后,内部为两个(),所以可以递归解决
        //对于特殊序列s,根据条件2,可以拆分为(1 + sub + 0)的形式,若sub也为特殊序列,则可以递归调用处理
        //从左到右遍历s,将拆分出来的每一个特殊子序列进行降序排序然后相加即为结果
        int lo = 0, hi = 0, n = s.length(), cnt = 0;
        if (n == 0 || s.charAt(0) == 0) {
            return s; //s不为特殊序列,直接返回
        }
        List<String> list = new ArrayList<>();
        for (; hi < n; hi++) {
            cnt += s.charAt(hi) == '1' ? 1 : -1;
            if (cnt == 0) {
                String sub = "1" + makeLargestSpecial(s.substring(lo + 1, hi)) + "0";
                list.add(sub);
                lo = hi + 1;
            }
        }
        list.sort(Comparator.reverseOrder());
        StringBuilder sb = new StringBuilder();
        for (String sub : list) {
            sb.append(sub);
        }
        return sb.toString();
    }
}

WeChat: Saraad

gongpeione commented 2 years ago
/*
 * @lc app=leetcode id=283 lang=typescript
 *
 * [283] Move Zeroes
 */

// @lc code=start
/**
 Do not return anything, modify nums in-place instead.
 */
function moveZeroes(nums: number[]): void {
    let pointerA = 0;

    for (let pointerB = 0; pointerB < nums.length; pointerB++) {
        // if nums[pointerB] not equals to zero, then swap nums[pointerA] and nums[pointerB]
        // and increase both pointerA and pointerB
        // if nums[pointerB] equals to zero, then do nothing about pointerA
        // and increase pointerB
        // make sure pointerA always point to the leftmost zero
        if (nums[pointerB]) {
            pointerA !== pointerB && ([nums[pointerA], nums[pointerB]] = [nums[pointerB], nums[pointerA]]);
            pointerA++;
        }
    }
};
// @lc code=end

微信id: 弘树 来自 vscode 插件