黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 8道經(jīng)典數(shù)組和字符串面試題

8道經(jīng)典數(shù)組和字符串面試題

更新時間:2020-10-19 17:53:06 來源:動力節(jié)點 瀏覽1328次

本文主要為大家介紹8道經(jīng)典數(shù)組和字符串經(jīng)面試題,可以作為大家求職面試題的磨刀石。這8道數(shù)組和字符串面試題主要是數(shù)組和字符串相關的在面試中出現(xiàn)頻率較高的面試題,希望能夠給小伙伴們的面試帶來一點點幫助。


1.棧的壓入和彈出 輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列5,4,3,2,1或3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。function IsPopOrder(pushV,popV){

if(pushV.length === 0) return false;

var stack = []; // 模擬棧

for(var i = 0, j = 0; i < pushV.length;){

stack.push(pushV[i]);

i += 1;

// 壓入棧的值需要被彈出

while(j < popV.length && stack[stack.length-1] === popV[j]){

stack.pop();

j++;

if(stack.length === 0) break;

}

}

return stack.length === 0;

}


2.利用棧模擬隊列思路:對棧A添加數(shù)據(jù)。如果棧B為空,循環(huán)將棧A中內(nèi)容彈出放入棧B,并彈出棧B最后一項如果棧B不為空,則直接彈出棧B的最后一項ar stackA = [];

var stackB = [];

function push(node){

stackA.push(node);

}

function pop(){

if(!stackB.length){

while(stackA.length){

stackB.push(stackA.pop());

}

}

return stackB.pop();

}


3. 找出連續(xù)最長不重復字符串在一個字符串中找出連續(xù)的不重復的最大長度的字符串,解決這類問題的思路:利用循環(huán)疊加字符串,直到出現(xiàn)重復為止每一次疊加,記錄下來最大長度的字符串// 連續(xù)最長不重復字符串

function getMaxLenStr(str) {

var cur = [];

var maxLenStr = '';

for(var i = 0; i < str.length; i++) {

if(!cur.includes(str[i])) {

cur.push(str[i]);

} else {

cur = []; // 置為空

cur.push(str[i]);

}

// 存儲最大長度的字符串

if(maxLenStr.length < cur.length) {

maxLenStr = cur.join('');

}

}

return maxLenStr;

}

getMaxLenStr('ababcabcde'); // abcde

方法二:var str = "aababcabcdeabcdefaababc";

var x = str.split('').reduce((a, b, index) => {

if(a.indexOf(b) !== -1) {

return a;

}

a.push(b);

return a;

}, []).join('');

console.log(x)

方法三:var s = "aababcabcdeabcdefaababc";

var lengthOfLongestSubstring = function(s) {

var str = ""; // 用于存放無重復字符串

var arr = [];

for(var i = 0; i < s.length; i++) {

var char = s.charAt(i);

var index = str.indexOf(char);

if(index === -1) {

str += char;

arr.push(str);

} else {

str = str.substr(index + 1) + char;

}

}

return arr.reduce((a, b) => {

return b.length > a.length ? b : a;

}, '');

};

console.log(lengthOfLongestSubstring(s));


4. 求一個數(shù)組當中,連續(xù)子向量的最大和。function FindGreatestSumOfSubArray(arr) {

let sum = arr[0];

let max = arr[0];

for(let i = 1; i < arr.length; i++) {

if(sum < 0) {

sum = arr[i];

}else{

sum += arr[i];

}

// 記錄最大值

if(max < sum) {

max = sum;

}

}

return max;

}


5. 給定一個編碼字符,按編碼規(guī)則進行解碼,輸出字符串 編碼規(guī)則:coount[letter] ,將letter的內(nèi)容count次輸出,count是0或正整數(shù),letter是區(qū)分大小寫的純字母。實例:const s= 3[a]2[bc]; decodeString(s); // 返回'aaabcbc'const s= 3[a2[c]]; decodeString(s); // 返回 'accaccacc' const s= 2[ab]3[cd]ef; decodeString(s); // 返回 'ababcdcdcdef'思路: 使用棧這種數(shù)據(jù)結構,如果 push 的內(nèi)容為‘]’,則循環(huán) pop 字符,直到碰到 ’[‘,然后將pop 出來的字符串按規(guī)則整理后,重新 push 進棧中,最后將棧內(nèi)的內(nèi)容拼接成字符串輸出即可。

方法1:function decodeString(str) {

let stack = []; // 存儲字符串的棧

for (let i = 0; i < str.length; i++) {

let cur = str[i];

if (cur !== ']') {

stack.push(cur);

} else { // 彈出

let count = 0;

let loopStr = [];

let popStr = '';

while ((popStr = stack.pop()) !== '[') {

loopStr.unshift(popStr);

}

count = stack.pop();

// 添加結果

let item = '';

for (let i = 0; i < count; i++) {

item += loopStr.join('');

}

stack.push(...(item.split('')));

}

}

return stack.join('');

}

方法2:const str = '3[a]2[bc]';

function decodeString(str) {

let Counts = str.split(/\[[a-zA-Z]+\]/);

let Letters = str.match(/[a-zA-Z]+/g);

let newString = "";

Letters.forEach((item,index)=>{

for (var n=0;n<counts[index];n++) p="" {<="">

newString += item;

}

})

return newString;

}

console.log(decodeString(str))


6. 實現(xiàn)一個方法,限定數(shù)組中元素出現(xiàn)的次數(shù),第一個參數(shù)為數(shù)組,第二個參數(shù)為限制數(shù)組中元素出現(xiàn)的最多次數(shù);要求不改變原素組的順序;例如:deleteNth((1, 1 1, 1), 2); //return [1, 1]

deleteNth((20, 37, 34, 20, 20, 37), 2); //return [20, 37, 34, 20, 37];復制代碼方法1:var arr = [4, 4, 4, 4, 3, 3, 3, 3, 1, 2, 4, 3, 90];

function deleteNth(arr, n) {

var newArr = [];

for (var i = 0; i < arr.length; i++) {

if (newArr.indexOf(arr[i]) == -1) {

newArr.push(arr[i]);

}

}

for (var i = 0; i < newArr.length; i++) {

var sum = 0;

for (var j = 0; j < arr.length; j++) {

if (arr[j] == newArr[i]) {

sum ++;

if (sum > n) {

arr.splice(j, 1);

j--;

}

}

}

}

return arr;

}

console.log(deleteNth(arr, 2))復制代碼方法2:var arr = [1, 1, 2, 5, 23, 23, 1, 1];

function deleteNth(arr, n) {

let newArr = arr.map( item => {

return item;

})//原始數(shù)據(jù)副本

let newArr1 = [];//處理后的數(shù)據(jù)

for (var i = 0; i < newArr.length; i++) {

if (newArr1.indexOf(newArr[i]) < 0) {

newArr1.push(newArr[i]);

} else if (newArr1.indexOf(newArr[i]) > -1) {

let hasIndexArr = [];//用于存放相匹配的項的索引

for (let j = 0; j < newArr1.length; j++) {

if (newArr1[j] == newArr[i]) {//將匹配的項的索引扔進hasIndexArr

hasIndexArr.push(j);

}

}

if (hasIndexArr.length < n) {//如果數(shù)量還不滿足n,扔進去

newArr1.push(newArr[i]);

}//如果數(shù)量已經(jīng)滿足,則跳過

}

}

return newArr1;

}

console.log(deleteNth(arr,1))復制代碼方法3:var arr = [4, 4, 4, 4, 3, 3, 3, 3, 1, 2, 4, 3, 90];

var cache = {};

function deleteNth(arr, x) {

return arr.filter(function (n) {

cache[n] = (cache[n]||0) + 1;

return cache[n] <= x;

})

}

console.log(deleteNth(arr, 1))


7. 實現(xiàn)一個方法,于數(shù)組中尋找某個值作為分割的界點,使得該值左右兩邊的數(shù)相加相等[1, 2, 3, 4, 3, 2, 1] => 返回下標3

[1, 100, 50, -51, 1, 1] => 返回下標1復制代碼方法1:var arr = [1, 2, 3, 4, 3, 2, 1];

function find (arr) {

var sum1 = 0;

for (var i = 0 ; i < arr.length ; i ++) {

sum1 += arr[i];

var sum2 = 0;

for (var j = i + 2 ; j < arr.length ; j ++) {

sum2 += arr[j];

}

if (sum1 == sum2) {

return i + 1;

} else if (i == arr.length - 3 && sum1 !== sum2) {

return "該值不存在";

}

}

}

console.log(find(arr))復制代碼方法2:var arr = [1, 2, 3, 4, 3, 2, 1];

for (var i = 0 ; i < arr.length - 2 ; i ++) {

var arr1 = arr.slice(0, i+1);

var arr2 = arr.slice(i+2);

var sum1 = sum2 = 0;

for (var m = 0 ; m < arr1.length ; m ++) {

sum1 += arr1[m];

}

for (var n = 0 ; n < arr2.length ; n ++) {

sum2 += arr2[n];

}

if (sum1 == sum2) {

console.log(i + 1);

break;

} else if (i == arr.length - 3 && sum1 !== sum2) {

console.log("該值不存在");

}

}


8. 自定義事件 var content = document.querySelector('.content');

// 自定義事件

var evt = new Event('custom');

var customEvt = new CustomEvent('customEvt', {

// 通過這個屬性傳遞參數(shù)

detail: {

name: 'tom',

age: 12

}

});

content.addEventListener('custom', (e) => {

console.log('自定義事件被觸發(fā),無參數(shù)...');

console.log(e);

});

content.addEventListener('customEvt', (e) => {

console.log('自定義事件被觸發(fā),有參數(shù)...');

console.log(e);

console.log(e.detail);

});

// 點擊時觸發(fā)這個自定義事件

content.addEventListener('click', (e) => {

content.dispatchEvent(evt);

content.dispatchEvent(customEvt);

});


小伙伴們可以拿上面的8道題數(shù)組和字符串面試題小試牛刀,檢驗一下自己學習Java的真實水平。如果覺得題目太少也沒關系,本站的Java面試題庫里有著海量的面試好題,是Java程序員面試刷題必備的哦。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久热青草 | 狠狠色狠狠色综合日日92 | 日韩亚洲欧美综合一区二区三区 | 日韩欧美视频一区二区在线观看 | 最近2019好看的中文字幕免费 | 国产一级大片免费看 | 国产在线观看网址在线视频 | 精品日韩在线视频 | 日本人成年视频在线观看 | 在线 成人| 国产黄视频网站 | 亚洲精品福利网站 | 亚洲综合欧美日韩 | 国产成人精品实拍在线 | 日韩在线网址 | 激情五月深爱五月 | 中文字幕第5页 | 国产成人高清视频免费播放 | 久久激情综合色丁香 | 黄色欧美在线观看 | 美女网站在线观看视频18 | 曰批免费视频播放在线看片二 | 欧美在线日韩 | 中国国产一国产一级毛片视频 | 性欧美videos粗暴 | 国产一区亚洲二区三区 | 亚洲高清综合 | 日批在线看 | 在线欧美日韩国产 | 九九热精品视频在线播放 | 最近中文字幕经典版在线 | 精品久久久久香蕉网 | 欧美一级在线看 | 日本精品免费 | 亚洲国产精品v在线播放 | 黄色免费网站在线播放 | 又爽又黄有又色的视频 | 一级女性全黄久久生活片 | 久久er国产精品免费观看1 | 50岁老女人毛片一级亚洲 | 欧美日韩国产人成在线观看 |