SHU-2016-SummerPractice / AlgorithmExerciseIssues

算法训练相关文件及工单。
https://github.com/SHU-2016-SummerPractice/AlgorithmExerciseIssues/issues
2 stars 0 forks source link

数字处理 2016-8-26 #39

Open zhaokuohaha opened 7 years ago

zhaokuohaha commented 7 years ago

27. Remove Element 29. Divide Two Integers

wolfogre commented 7 years ago

想改得优美一点,改不好

// [AC] 27. Remove Element
public class Solution {
    public int removeElement(int[] nums, int val) {
        int newArrayEnd = 0;
        int scanner = nums.length - 1;
        while(newArrayEnd <= scanner && nums[newArrayEnd] != val)
            ++newArrayEnd;
        while(scanner > newArrayEnd && nums[scanner] == val)
            --scanner;   
        while(scanner > newArrayEnd){
            nums[newArrayEnd] = nums[scanner];
            --scanner;
            ++newArrayEnd;
            while(newArrayEnd <= scanner && nums[newArrayEnd] != val)
                ++newArrayEnd;
            while(scanner > newArrayEnd && nums[scanner] == val)
                --scanner;
        }
        return newArrayEnd;
    }
}
dayang commented 7 years ago
/**
 * [AC] LeetCode 27 Remove Element   使用js函数splice
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    for(var i = 0; i < nums.length; i++){
        if(nums[i] === val){
            nums.splice(i,1);
            i--;
        }
    }
    return nums.length;
};

/**
 *  [AC] LeetCode 27 Remove Element
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    var i,j = nums.length - 1;

    for(i = 0; i <= j;){
        if(nums[i] === val){
            nums[i] = nums[j];
            j--
        }else{
            i++
        }
    }

    return j + 1;
};
zhaokuohaha commented 7 years ago

27 - C

public class Solution {
    public int RemoveElement(int[] nums, int val) {
        if(nums.Length==0) return 0;
        int left = 0;
        int right = nums.Length-1;
        while(left < right){
            while(left < right && nums[left] != val) 
                left++;
            if(left < right){
                nums[left] = nums[right];
                nums[right] = val;
                right--;
            }
        }
        return nums[right]==val ? right : right+1;
    }
}
zhaokuohaha commented 7 years ago

29 - 搬代码 - 看不懂

public class Solution
{
    public int Divide(int dividend, int divisor)
    {
        if (divisor == 0) return int.MaxValue;
        int sign = dividend > 0 ^ divisor > 0 ? -1 : 1;
        long m = Math.Abs((long)dividend);
        long n = Math.Abs((long)divisor);
        long count = 0;
        for(m-=n; m>=0; m -= n)
        {
            count++;
            if (m == 0) break;
            for(int subCount = 1; m -(n << subCount) >=0; subCount++)
            {
                m -= n << subCount;
                count += (int)Math.Pow(2, subCount);
            }
        }
        if (sign == 1) return (int)Math.Min(count, int.MaxValue);
        return (int)-count;
    }
}