JavaScript编程那些事(牛客网 LeetCode)

计算给定数组 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; }

 

posted @ 2017-03-06 11:29  123默小白  阅读(283)  评论(0编辑  收藏  举报