昨天半夜的一道題。數組
思路: 設定一個長度爲10的數組,下標分別是0~9,遍歷長度爲N的數組,將其對應的下標元素+1,在輸出的時候,從下標爲9的開始遍歷輸出便可。一個長度爲N的數組,每一個元素爲0~9的數字,將其從大到小進行排序。函數
function Find(array){
var box = new Array(10).fill(0);
var arrayBox = [];
array.forEach(function(value,index){
box[value]++;
})
for(let j = box.length-1 ; j >= 0 ; j--){
for(let i = 0 ; i < box[j] ; i++){
arrayBox.push(j);
}
}
return arrayBox;
}
複製代碼
在一個二維數組中(每一個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。ui
外層函數循環,第一個參數進行判斷,若是第一個參數都大於目標數,那麼不須要進行遍歷,直接輸出false,
若是小於目標數,對內層函數進行every循環,若是數字小於目標數,繼續進行循環,
若是沒有,判斷是否相等,若是相等輸出true,並結束循環,
若是大於就退出本次內層循環。spa
function Find(target, array) {
var have = false;
array.forEach(function(value,index){
//若是第一個數大於目標數,就返回false
if(have == true || value[0] > target){
return false;
//第一個數不大於目標數,進入第二層循環
} else {
//若是裏面的數小於目標數,就循環,若是大於目標數,就退出循環,若是等於也退出循環
value.every(function(v,i){
if(v < target){
return true;
}else{
if(v == target){
have = true;
}
return false;
}
})
}
})
return have;
}
複製代碼
空間複雜度是1,時間複雜度是M×N3d
將二維數組弄成棋盤,外層爲排,內層爲列。
code
function Find(target, array) {
//肯定右上角起點座標array[i][j] = array[0][array[0].length -1]
//橫排變量
var i = 0;
//豎排變量
var j = array[0].length -1;
//循環進行判斷
while(true){
//判斷邊界,若是超出了左下角就退出循環而且返回false
if(i >= array.length || j < 0){
return false
}
//若是沒有超出邊界,就判斷是否相等,若是相等直接跳出循環而且返回true
if(target == array[i][j]){
return true
}
//若是沒有達到跳出循環條件,那麼判斷是該往下走仍是往左走
if(target > array[i][j]){
i++;
}else{
j--;
}
}
}
複製代碼
空間複雜度是O1,時間複雜度是M+Ncdn