leetcode 283 移动零

简介: leetcode 283 移动零

移动零

队列法

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        queue<int> myqueue;
        for(int i=0 ; i<nums.size() ;i++)
            if(nums[i] != 0) myqueue.push(nums[i]);
        for(int i=0 ; i<nums.size() ;i++)
        {
             if(myqueue.size()!=0)
            {
                nums[i] = myqueue.front();
                myqueue.pop();
            }else nums[i] = 0;
        }     
    }
};

双指针

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int left =0;
        for(int right = 0 ; right < nums.size() ;right++)
        {
            if(nums[right] != 0)
            {
                nums[left] = nums[right];
                left++;
            }
        }
        for(int i=left ; i<nums.size() ;i++)
            nums[i] = 0;
    }
};
相关文章
|
机器学习/深度学习 自然语言处理 算法
每日算法系列【LeetCode 827】最大人工岛
在二维地图上, 0 代表海洋, 1 代表陆地,我们最多只能将一格 0 海洋变成 1 变成陆地。 进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)
151 0
每日算法系列【LeetCode 827】最大人工岛
leetcode第14题
我们把原来的数组分成两部分,求出左半部分的最长公共前缀,求出右半部分的最长公共前缀,然后求出的两个结果再求最长公共前缀,就是最后的结果了。 求左半部分的最长公共前缀,我们可以继续把它分成两部分,按照上边的思路接着求。然后一直分成两部分,递归下去。 直到该部分只有 1 个字符串,那么最长公共子串就是它本身了,直接返回就可以了。
leetcode第14题
|
人工智能 算法
leetcode第41题
对于这种要求空间复杂度的,我们可以先考虑如果有一个等大的空间,我们可以怎么做。然后再考虑如果直接用原数组怎么做,主要是要保证数组的信息不要丢失。目前遇到的,主要有两种方法就是交换和取相反数。
103 0
leetcode第41题
leetcode第48题
将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。 解法一 可以先转置,然后把每列对称交换交换一下
100 0
leetcode第48题
|
Java
leetcode-771 Jewels and Stones
771-Jewels and Stones(字符串中查找特有字符个数)
1711 0
|
存储 算法
leetcode第49题
时间复杂度:两层 for 循环,再加上比较字符串,如果字符串最长为 K,总的时间复杂度就是 O(n²K)。 空间复杂度:O(NK),用来存储结果。 解法一算是比较通用的解法,不管字符串里边是大写字母,小写字母,数字,都可以用这个算法解决。这道题的话,题目告诉我们字符串中只有小写字母,针对这个限制,我们可以再用一些针对性强的算法。 下边的算法本质是,我们只要把一类的字符串用某一种方法唯一的映射到同一个位置就可以。
200 0
leetcode第49题
leetcode第16题
受到上一题的启发,没有看的,推荐大家可以看一下。我们完全可以先将数组排序,然后先固定一个数字,然后利用头尾两个指针进行遍历,降低一个 O(n)的时间复杂度。 如果 sum 大于 target 就减小右指针,反之,就增加左指针。
leetcode第16题
|
人工智能 算法 C++
每日算法系列【LeetCode 927】三等分
每日算法系列【LeetCode 927】三等分
leetcode第7题
为什么呢?倒置过来不应该是 9646324351 吗。其实题目里讲了,int 的范围是 [-2^{31} ,2^{31}-1][−2 ​31 ​​ ,2 ​31 ​​ −1] 也就是 [-2147483648,2147483647][−2147483648,2147483647] 。明显 9646324351 超出了范围,造成了溢出。所以我们需要在输出前,判断是否溢出。 问题的关键就是下边的一句了。 rev = rev * 10 + pop; 为了区分两个 rev ,更好的说明,我们引入 temp 。 temp = rev * 10 + pop; rev = temp; 我们对 t
106 0
leetcode第7题
|
算法
【LeetCode】这么简单的题,豆编又不会!
【LeetCode】这么简单的题,豆编又不会!
150 0

热门文章

最新文章