逻辑题目汇总

43 阅读2分钟

一、给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。

function getSubLongStr(str){
    const map = new Map();
    const set = new Set();
    const len = str.length;
    
    let j=-1,i=0,max = 0;
    for(;i<len;i++){
        if(i!==0){
            const num = set.size;
            const subStri = Array.from(set).join('');
            if(map.has(num)){
                map.get(num).push(subStri)
            }else{
                map.set(num,[subStri])
            }
            set.delete(str.charAt(i-1));
        }
        
        while(j+1 < len && !set.has(str.charAt(j+1)) ){
            set.add(str.charAt(j+1));
            j++;
        }
        max = Math.max(max, j-i +1);
    }
    return {
        max: max,
        strArr: map.get(max)
    }
}

二、汽水瓶

某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。

小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。

数据范围:输入的正整数满足 1≤n≤100 1≤n≤100 

注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
   while ((line = await readline())) {
    let list = [];
    list.push(parseInt(line));
    for (let index = 0; index < 9; index++) {
      let count = parseInt(await readline());
      if (count === 0) {
        break;
      }
      list.push(count);
    }

    let result = []
    list.forEach(item => {
      let drinkCount = 0;// 喝的饮料数
      while (item >= 3) {
        let changeBottles = parseInt(item / 3);// 能换的饮料数
        let otherBottoles = item % 3;// 每次兑换剩下的瓶子数

        drinkCount += changeBottles;
        item = changeBottles + otherBottoles;
      }

      if (item === 2) {
        drinkCount ++;
      }
      result.push(drinkCount);
    })
    for (const item of result) {
      console.log(item);
    }
  }
}()

三、明明的随机数

明明生成了NN个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

数据范围: 1≤n≤1000 1≤n≤1000  ,输入的数字大小满足 1≤val≤500 1≤val≤500

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    let n = parseInt(await readline());
    let set = new Set();
    for(let i =0; i < n;i++){
        let num = parseInt(await readline());
        set.add(num);
    }
    let arr = Array.from(set).sort((a,b)=>a-b);
    arr.forEach(item=>{
        console.log(item);
    })
})();

四、进制转换

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。 数据范围:保证结果在 1≤n≤231−1 1≤n≤231−1

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        console.log(parseInt(line,16))
    }
}()

//datawhalechina.github.io/huawei-od-p… //renjie.blog.csdn.net/article/det…