LintCode之移动零

题目描述:

分析:由于要使非零元素保持原数组的顺序,我只能想出在找到一个0时,逐个移动数组元素使得后一个元素覆盖前一个元素,再将这个0移到后头去。

我的代码:

 1 public class Solution {
 2     /*
 3      * @param nums: an integer array
 4      * @return:
 5      */
 6     public void moveZeroes(int[] nums) {
 7         // write your code here
 8         //当数组为空时直接返回
 9         if(nums.length == 0) {
10             return;
11         }
12         boolean b = true;
13         //判断数组是否全为0,若是,则直接返回
14         for(int i=0; i<nums.length; i++) {
15             if(nums[i] != 0) {
16                 b = false;
17             }
18         }
19         if(b == true) {
20             return ;
21         }
22
23         int k = nums.length-1;
24         int i = k;
25         while(i >= 0) {
26             //从后往前找元素值为0的数
27             while(i>=0 && nums[i]!=0) {
28                 i--;
29             }
30             if(i >= 0) {
31                 int temp = nums[i];
32                 for(int j=i; j<k; j++) {
33                     nums[j] = nums[j+1];
34                 }
35                 nums[k] = temp;
36                 k--;
37             }
38         }
39     }
40 }
时间: 2024-10-19 02:43:08

LintCode之移动零的相关文章

LintCode 尾部的零

设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 分析:0的个数=5的倍数+5^2的倍数+5^3的倍数+5^4的倍数+5^5的倍数+-- class Solution { public: // param n : description of n // return: description of return long long trailingZeros(long long n) { long count=0;//一定是long~~~~ for(

LintCode 2. 尾部的零

题目:设计一个算法,计算出n阶乘中尾部零的个数. 样例 11! = 39916800,因此应该返回 2 挑战 O(logN)的时间复杂度. 解:2*5=10;可当n!展开,观察得2的个数肯定比5的个数多,所以只需统计n!中5的个数即可知尾0的个数. class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ lo

[LintCode] Trailing Zeroes 末尾零的个数

Write an algorithm which computes the number of trailing zeros in n factorial. Have you met this question in a real interview? Yes Example 11! = 39916800, so the out should be 2 Challenge O(log N) time s

[LintCode] Move Zeroes 移动零

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements. Notice You must do this in-place without making a copy of the array. Minimize the total number of operations. Exampl

LintCode:剑指Offer

第1章: 9.Fizz Buzz :http://www.lintcode.com/zh-cn/problem/fizz-buzz/ 解法1:(%  String.valueOf) (1.rst;  2.for(1,n),15,5,3,else;  3.return) 1 public class Solution { 2 public List<String> fizzBuzz(int n) { 3 List<String> rst = new ArrayList<>

lintcode 128哈希函数

描述 在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如: hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % HASH_SIZE = (97* 333 + 98 * 332 + 99 * 33 +100)

LintCode数组题总结

做算法题的时候,几乎不可避免要跟数组打交道.在LintCode上数组那一章有这么一些题目: 1)547. Intersection of Two Arrays 比较简单.要求找到2个数组的交集,简单点的方法就是用2个hashSet,第一个HashSet存第一个数组的元素.然后扫描第二个数组,如果第二个数组中的元素在第一个HashSet中出现了,那么就把它加到第二个HashSet中.最后第二个HashSet就是两个数组的交集了. 2)138. Subarray Sum 要求在一个数组中找到一个子数

零基础的人该怎么学习JAVA

对于JAVA有所兴趣但又是零基础的人,该如何学习JAVA呢?对于想要学习开发技术的学子来说找到一个合适自己的培训机构是非常难的事情,在选择的过程中总是 因为这样或那样的问题让你犹豫不决,阻碍你前进的步伐,今天就让小编为您推荐培训机构新起之秀--乐橙谷Java培训机构,助力你成就好未来. 选择java培训就到乐橙谷 北京有什么好的Java培训机构?来乐橙谷北京学Java,零基础走起,乐橙谷Java基础班授课老师经验非常丰富,课程内容安排合理,适合于有一点点Java基础甚至一点都不会Java的同学学

Matlab - 求数组的零值与过零点索引

function zeroindex=pickzero(x)%找出数组的零值及过零点(正负相交处,可能偏离0)m = length(x);x1=x(1:m-1);x2=x(2:m);indz = find(x==0); %zero pointindzer = find(x1.*x2<0); %negative/positiven=length(indzer);for i=1:n if abs(x(indzer(i)))>abs(x(indzer(i)+1)) indzer(i)=indzer(