Open zhaokuohaha opened 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;
}
}
/**
* [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;
};
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;
}
}
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;
}
}
27. Remove Element 29. Divide Two Integers