1. 程式人生 > >牛客網的線上程式設計

牛客網的線上程式設計

二分查詢

function binary_search(arr, key) {
  var low = 0,
      high = arr.length - 1;
  while(low <= high){
    var mid = parseInt((high + low) / 2);
    if(key == arr[mid]){
      return mid;
    }else if(key > arr[mid]){
      low = mid + 1;
    }else if(key < arr[mid]){
      high = mid -1;
    }
  }
  return -1;
}

實現一個打點計時器,要求
1、從 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一個數字,每次數字增幅為 1
2、返回的物件中需要包含一個 cancel 方法,用於停止定時操作
3、第一個數需要立即輸出

function count(start, end) {
    console.log(start++);
    var p=  setInterval(function(){
        if(start<=end){
            console.log(start++);
        } else{
            clearInterval(p);
        }
    },100)
    return {
        cancel: function(){
            clearInterval(p);
        }
     }
}
 

找出陣列 arr 中重複出現過的元素

輸入

[1, 2, 4, 4, 3, 3, 1, 5, 3]

輸出
[1, 3, 4]

方法一 function duplicates(arr) {
    var newArray = [];
    arr.map(function(item,index){
        if(arr.indexOf(item) !== arr.lastIndexOf(item)){
           newArray.push(item);
           }
    })
   return newArray.filter(function(item,index){
       return index ===  newArray.indexOf(item)
    })
}

方法二

function duplicates(arr) {
 var result = [];
    arr.forEach(function(elem){
       if(arr.indexOf(elem) !=arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
           result.push(elem);
       }
    });
    return result;
}

移除陣列 arr 中的所有值與 item 相等的元素,直接在給定的 arr 陣列上進行操作,並將結果返回。

function removeWithoutCopy(arr, item) {
    var array = [];
    arr.map(function(a,index,arr){
        if(a === item){
            arr.splice(index,index+1);  
        }
    })
    return arr
}

陣列去重

let arr = ['1', '2', '3', '1', 'a', 'b', 'b']

const unique =

arr => {

return arr.filter((ele, index, array) => {

return index === array.indexOf(ele)

})

} console.log(unique(arr)) // ['1','2','3','a','b']

使用Math裡面自帶的max和min方法

function getMaxOfArray(numArray) {

  return Math.max.apply(null, numArray);

}

返回陣列中最大的差值

let arr = [23, 4, 5, 2, 4, 5, 6, 6, 71, -3];

const difference = arr => {

let min = arr[0], max = 0;

arr.forEach(value => {

if (value < min)

min = value

if (value > max) max = value })

return max - min ;

}

console.log(difference(arr)) // 74

深拷貝

 function deepClone(obj) {
      var temp = Array.isArray(obj) ? [] : {};
      for (var key in obj) {
        temp[key] =  typeof obj[key] === 'object' ? deepClone(key) : obj[key]
      }
      return temp;
}

    var foo = deepClone({
      name: 'wayne',
      age: 21,
      others: {
        school: 'xjtu',
        province: 'xinjiang'
      }
    })

淺拷貝:

     陣列
     var a = [2, [3,5,7], {name: 'wayne'}];
        var b = a.slice(0)
       
 物件
 var obj1 = {
            name: 'wayne', 
            age: 22,
            other: {
                hobby: 'table',
                school: 'xjtu'
            }
        }
 var obj2 = Object.assign({}, obj1);