LeetCode283_283. ゼロの移動

LeetCode283_283. ゼロの移動

1. 説明

配列 nums を指定して、ゼロ以外の要素の相対的な順序を維持しながら、すべての 0 を配列の末尾に移動する関数を作成します。

配列はコピーせずにその場で操作する必要があることに注意してください。

例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

例 2:

输入: nums = [0]
输出: [0]

ヒント:

1 <= nums.length <= 104
負の 2 の 31 乗 <= nums[i] <= 2 の 31 乗 - 1

2、解決策

方法 1: リストを使用する

    //AC Your runtime beats 17.86 % of java submissions.
    public void moveZeroes(int[] nums) {
    
    
        //int[] nums1 = new int[nums.length];
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < nums.length; i++) {
    
    
            if (nums[i] != 0) {
    
    
                list.add(nums[i]);
            }
        }
        for (int i = 0; i < list.size(); i++) {
    
    
            nums[i] = list.get(i);
        }
        for (int i = list.size(); i < nums.length; i++) {
    
    
            nums[i] = 0;
        }
        //System.out.println(Arrays.toString(nums));
    }

方法 2: ダブル ポインター

    //方法二: 双指针
    //先给非0数据依次放到数组左边,然后给剩余的位置的数据置为0
    //AC 通过
    public void moveZeroes2(int[] nums) {
    
    
        if (nums == null || nums.length == 0) {
    
    
            return;
        }
        //1、给非0数据往前挪
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
    
    
            if (nums[i] != 0) {
    
    
                nums[j] = nums[i];
                j++;
            }
        }

        //2、挪完了非0数据,后续的位置的数据都置为0
        for (int i = j; i < nums.length; i++) {
    
    
            nums[i] = 0;
        }
    }

方法 3: クイック ソートのアイデアを使用したダブル ポインターの最適化バージョン。

    //方法三:优化版双指针,使用快排的思想。
    //以0位分界点,给大于0的依次保持顺序挪到左边,右侧的直接置为0就行了。
    //AC 通过
    public void moveZeroes3(int[] nums) {
    
    
        if (nums == null || nums.length == 0) {
    
    
            return;
        }
        //1、给非0数据往前挪,然后给后面的位置置为0
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
    
    
            if (nums[i] != 0) {
    
    
                int temp = nums[i];
                nums[i] = 0;
                nums[j] = temp;
                j++;
            }
        }
    }

LeetCode 217. 重複要素の存在
LeetCode 229. マジョリティ II
LeetCode 231. 2 の累乗LeetCode
234. 回文リンク リスト
LeetCode 237. リンク リスト内のノードの削除
LeetCode 242. 有効なアルファベット単語
LeetCode 257. バイナリ ツリー内のすべてのパス
LeetCode 258ビットの追加
LeetCode 263. 醜い数字
LeetCode 268. 欠落した数字
LeetCode 283. ゼロの移動
LeetCode 287. 重複の検索



免責事項:
        トピックの著作権は元の作成者に属します。記事内のコードおよび関連する記述は私の理解に基づいて私が書いたものです、記事内の関連する写真は私が実践した際のスクリーンショットおよび関連技術に対応する写真です。異議がある場合は連絡して削除してください。ありがたい。転載は出典を明記してください、よろしくお願いします。


投稿者:luoyepiaoxue2014

ステーション B: https://space.bilibili.com/1523287361クリックしてリンクを開きます
Weibo: http://weibo.com/luoyepiaoxue2014クリックしてリンクを開きます

おすすめ

転載: blog.csdn.net/luoyepiaoxue2014/article/details/129742144
おすすめ