计算给定数组 arr 中所有元素的总和
本人提供常规方法
function sum(arr) {
var len = arr.length;
var sum = 0;
if(len == 0){
sum = 0;
}else{
for(var i = 0;i < len;i++){
sum += arr[i];
}
}
return sum;
}
不知名大神提供的方法
function sum(arr) { return eval(arr.join('+')); }
移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
我的常规方法:
function remove(arr, item) {
var len = arr.length;
var results = [];
if(len == 0){
results = [];
}else{
for(var i = 0;i < len;i++){
if(arr[i] != item){
results.push(arr[i]);
}
}
}
return results;
}
巧用API解决
function remove(arr,item){
return arr.filter(function(ele){
return ele != item;
})
}
在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
第一次做法是:
function append(arr, item) {
var temp = [];
temp = arr;
temp.push(item);
return temp;
}
这种做法是错误的,直接赋值双方引用相等会改变原数组
正确做法:
var temp = arr.slice(0);
var temp = [].concat(arr);
也可以直接
return arr.concat(item);
移除数组中的最后一项,且不改变原数组
arr.slice(0,arr.length-1);//slice(n,m)中从小标n开始到下标m的前一项(不包括下标为m的那一项)。
278. First Bad Version(leetcode)
var solution = function(isBadVersion) { 15 /** 16 * @param {integer} n Total versions 17 * @return {integer} The first bad version 18 */ 19 return function(n) { 20 return findBadVersion(1, n); 21 22 function findBadVersion(start, end){ 23 var index = parseInt((start + end) / 2); 24 if(isBadVersion(index)){ 25 if(!isBadVersion(index - 1)){ 26 return index; 27 }else{ 28 return findBadVersion(start, index - 1); 29 } 30 }else{ 31 return findBadVersion(index + 1, end); 32 } 33 } 34 }; 35 };
4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
var findMedianSortedArrays = function(nums1, nums2) { var len1 = nums1.length; var len2 = nums2.length; var number;
//选择一个长的数组为nums1,短的为nums2 if(len1 <= len2){ var tempArr = []; tempArr = nums1; nums1 = nums2; nums2 = tempArr; len1 = nums1.length; len2 = nums2.length; }
//如果数组长度均为0 if(len1 === 0){ console.log('数组为空');
//如果只有短的数组长度为0,长数组根据不同情况返回number值 }else if(len1 !== 0 && len2 === 0){ if(len1 ===1){ number = nums1[0]; }else if(len1 === 2){ number = (nums1[0] + nums1[1]) / 2; }else if(len1 > 2){ number = medianSortedArrays(nums1); } }else{
//数组长度都不为0 if(nums1[0] >= nums2[len2-1]){
//如果短数组的最大值小于长数组最小值,长数组衔接在短数组后面 var arr = nums2.concat(nums1); number = medianSortedArrays(arr); }else if(nums1[len1-1] <= nums2[0]){
//如果短数组的最小值大于长数组的最大值,短数组衔接在长数组后面 var arr1 = nums1.concat(nums2); number = medianSortedArrays(arr1); }else{ var i,j; for(i = 0,j = 0;i < len1,j < len2;){ if(nums2[j] > nums1[i]){
//将下标为j的短数组中的数插入到长数组中;寻找比其大的数,没有找到则,长数组的下标加1; i++; }else{
//找到后则在i处插入短数组的一个值,且长数组长度加1; nums1.splice(i,0,nums2[j]); len1++; //len2--; j++; } } number = medianSortedArrays(nums1); } } return number; }; //返回一个数组中间数的大小,奇数则返回中间下标的值,偶数则返回下标为中间两个数的值 function medianSortedArrays(arr){ var len = arr.length; var number; if(len%2 === 0){ number = (arr[len/2-1] + arr[len/2])/2; }else{ number = arr[Math.floor(len/2)]; } return number; }