刷題記錄:劍指offer+遇到的筆試題+LeetCode

mylittleZ發表於2019-03-16

加油鴨!

先總結一下陣列的方法

1.concat() 方法用於連線兩個或多個陣列。

該方法不會改變現有的陣列,而僅僅會返回被連線陣列的一個副本。

2.join() 方法用於把陣列中的所有元素放入一個字串,元素是通過指定的分隔符進行分隔的。

3.pop() 方法用於刪除並返回陣列的最後一個元素。

4.push() 方法可向陣列的末尾新增一個或多個元素,並返回新的長度。

5.split() 方法用於把一個字串分割成字串陣列。

6.reverse() 方法用於顛倒陣列中元素的順序。

7.splice() 方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。

8.shift() 方法用於把陣列的第一個元素從其中刪除,並返回第一個元素的值。

10.unshift() 方法可向陣列的開頭新增一個或更多元素,並返回新的長度。

9.slice() 方法可從已有的陣列中返回選定的元素。

11.toString() 方法可把一個邏輯值轉換為字串,並返回結果。

12.sort() 方法用於對陣列的元素進行排序。注意!陣列在原陣列上進行排序,不生成副本。 如果呼叫該方法時沒有使用引數,將按照字元編碼的順序進行排序。要實現這一點,首先應把陣列的元素都轉換成字串(如有必要),以便進行比較。

註釋:該方法會改變原始陣列。

2019/3/8 CVTE 一面

題目:leetcode第九題迴文

判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

var isPalindrome = function(x) {
    return x.toString() === x.toString().split('').reverse().join('');
};//先將數值用tostring轉為字串,再用split()方法將字串分割成陣列
  // 用reverse()顛倒順序,join()來重新組合,最後判斷是否相等就行了
複製程式碼

如果是迴文字母的話

最簡單的實現

 function palindrome(str) {
        var arr = str.split('');
        var arr1 = arr.reverse();
        var arr2 = arr1.join('');
        if(str == arr2){
            console.log(true);
        }else {
            console.log(false);
        }
    }
    palindrome("abba");
複製程式碼

如果要考慮到非字元的因素

function palindrome(str) {
        var newStr= str.replace(/\W+/g,'');//匹配所有非單詞的字元,替換為空字串
        newStr= newStr.replace(/\_+/g,'');//匹配所有下劃線,替換為空字串
        newStr=newStr.toLowerCase();
        //轉化字串為小寫
        var arr1= newStr.split('');
        var arr2=arr1.reverse();
        var newStr2=arr2.join('');
        //重構倒序的字串
        if(newStr == newStr2){//比較1
            console.log(true);
        }else{
           console.log(false);
        }
    }
    palindrome("abba");
複製程式碼

2019/3/15 北森測評程式設計題

找出陣列中重複出現的數字生成一個新的陣列並對陣列從小到大排序

function duplicates(arr) {
    var newArr=[];
    arr.sort();
    console.log(arr);
    for(var i =0;i<arr.length;i++){
        if(arr[i]==arr[i+1]&&(newArr.indexOf(arr[i])==-1) ){
        //如果arr中的數字重複了,且這個數還沒被push進newArr陣列中就執行
            newArr.push(arr[i]);
            i++;
        }
    }
    console.log(newArr);
}
duplicates([5,5,2,3,1,6,3])
複製程式碼

結果為:3,5

indexOf() 方法可返回某個指定的字串值在字串中首次出現的位置。如果要檢索的字串值沒有出現,則該方法返回 -1

LeetCode區域和檢索 - 陣列不可變

給定一個整數陣列 nums,求出陣列從索引 i到j (i ≤ j)範圍內元素的總和,包含i, j 兩點

示例:給定 nums = [-2, 0, 3, -5, 2, -1],求和函式為 sumRange()

sumRange(0, 2) -> 1

sumRange(2, 5) -> -1

sumRange(0, 5) -> -3


var NumArray = function(nums) {
  this.array = [nums[0]];
  for (let i = 1, len = nums.length; i < len; i++) {
    this.array.push(nums[i] + this.array[i-1]);
  }
};
NumArray.prototype.sumRange = function(i, j) {
  return (i === 0) ? this.array[j] : (this.array[j] - this.array[i-1]);
};


複製程式碼

求一個字串的位元組長度

假設:一個英文字元佔用一個位元組,一箇中文字元佔用兩個位元組

function GetBytes(str){
  var len = str.length;
  var bytes = len;
  for(var i=0; i<len; i++){
    if (str.charCodeAt(i) > 255) bytes++;
  }
  return bytes;
}
alert(GetBytes("你好,as"));
複製程式碼

解析:先讓長度直接等於這組字串的長度,再判斷如果是中文的話再加1.

而我一開始的思路是一個個判斷,英文加1,中文加2.這樣效率低

陣列扁平化,將一個多維陣列變為一維陣列

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

function f(arr) {
        arr1 = arr.toString();//使用join(',')也可以,但是裡面得用','隔開
        var arr2 = arr1.split();
        console.log(arr2);
    }
    f( [1, [2, 3, [4, 5]]]);
複製程式碼

解析:這個其實非常簡單,只要掌握了toString()將陣列拆成字串以及split()將字串變成陣列的用法就可以了

用reduce方法實現map方法和filter方法 頭條一面

const numbers = [10, 20, 30, 40];
const go = numbers.reduce((finalList, num) => {
  //實現map方法,對映的作用
    num = num * 2;

    if (num > 50) {
  //實現filter方法過濾
        finalList.push(num);

    }

    return finalList;

}, []);

alert(go); // [60, 80]
複製程式碼

劍指offer

1.二維陣列的查詢

在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

思路:從最左下角的開始查詢

function Find(target, array) {
  // write code here
  const n = array.length,
    m = array[0].length;
  let row = n - 1,
    col = 0;
  if (m === 0 && n === 0) {
    return false;
  }
  while (row >= 0 && col <= m - 1) {
    if (array[row][col] > target) {
      row--;
    } else if (array[row][col] < target) {
      col++;
    } else return true;
  }
  return false;
}
複製程式碼

查詢字串出現次數最多的字元

  function transform(str){
        var json = [];
        for(var i=0;i<str.length;i++){
            var char = str.charAt(i);   //分離str成一個個的字元;
           // console.log(char);
            //  設定char為json的key,出現的次數json[char]為value;
            if(json[char]){           //設定json的value
                json[char]++;
            }else{
                json[char] = 1;
            }
        }
        var maxchar = null;   //次數最多的字元
        var max = 0           //次數最多的字元的次數
        //冒泡事件找最大值
        for(var key in json){
          console.log(json[key]);
            if(max < json[key]){
                max = json[key];
                maxchar = key;
            }
        }
      console.log("出現的最多是" + maxchar);
        console.log("總共出現的次數" + max);
    }
    //呼叫函式
    var str ='abccasss';
    transform(str);
複製程式碼

刪除重複字串

indexOf() 方法可返回某個指定的字串值在字串中首次出現的位置。

var s = readline();
var arr = [];
for(var i=0;i<s.length;i++){
    if(arr.indexOf(s[i])==-1){ //值為-1即第一次出現
        arr.push(s[i]);
    }
}
print(arr.join(""));
複製程式碼

相關文章