版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎关注我的微博@叮當了個和諧 https://blog.csdn.net/qq_25073545/article/details/82559004
UTF-8校验
//js版本代码
/**
* Created by dcp on 2018/9/9.
*/
// UTF-8校验
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var inputArr = [];
rl.on('line', function (input) {
inputArr.push(input);
var nLine = +inputArr[0];//转化成数字类型
// console.log(inputArr)
if (inputArr.length==2) {
// console.log(inputArr)
// console.log(inputArr.slice(1))
var arr=inputArr.slice(1).toString().split(' ')
var result=arr.map(function (item) {
return item-0
})
// console.log(arr)
// console.log(result)
console.log(validUtf8(result))
}
});
function validUtf8(data) {
if(data==null || data.length==0) return 0;
for(var i=0;i<data.length;i++) {
if(data[i]>255) return 0; // 1 after 8th digit, 100000000
var numberOfBytes = 0;
if((data[i] & 128) == 0) { // 0xxxxxxx, 1 byte, 128(10000000)
numberOfBytes = 1;
} else if((data[i] & 224) == 192) { // 110xxxxx, 2 bytes, 224(11100000), 192(11000000)
numberOfBytes = 2;
} else if((data[i] & 240) == 224) { // 1110xxxx, 3 bytes, 240(11110000), 224(11100000)
numberOfBytes = 3;
} else if((data[i] & 248) == 240) { // 11110xxx, 4 bytes, 248(11111000), 240(11110000)
numberOfBytes = 4;
} else {
return 0;
}
for(var j=1;j<numberOfBytes;j++) { // check that the next n bytes start with 10xxxxxx
if(i+j>=data.length) return 0;
if((data[i+j] & 192) != 128) return 0; // 192(11000000), 128(10000000)
}
i=i+numberOfBytes-1;
}
return 1;
}
2. IP地址还原
/**
* Created by dcp on 2018/9/9.
*/
var readline=require("readline");
var r1=readline.createInterface({
input:process.stdin,
output:process.stdout
});
//数组存储输入
// var inputs=[];
r1.on("line",function(data){
// inputs.push(data);
console.log(restoreIpAddresses(data))
});
var restoreIpAddresses = function(s) {
var length = s.length;
var result = [];
parse([], 0);
return result.length;
function parse(prefix, idx) {
if (prefix.length === 4) {
return idx === length ? result.push(prefix.join('.')) : null;
}
for (var i = 1; i <= 3; i++) {
var token = s.substring(idx, idx + i);
if (/^(0|[^0]\d*)$/.test(token) && parseInt(token) < 256) {
var newPrefix = prefix.slice(0);
newPrefix.push(token);
parse(newPrefix, idx + i);
}
}
}
};
最长不重复子串
查找 最大 不含重复字符 子字符串
思路:窗口遍历
/**
* Created by dcp on 2018/9/9.
*/
// 最大不重复子串
var readline=require("readline");
var r1=readline.createInterface({
input:process.stdin,
output:process.stdout
});
//数组存储输入
// var inputs=[];
r1.on("line",function(data){
// inputs.push(data);
console.log(lengthOfLongestSubstring(data))
});
var lengthOfLongestSubstring = function(s) {
let [mx, start, chars] = [0, 0, {}];
for (let i = 0; i < s.length; i++){
if (start <= chars[s[i]]){
start = chars[s[i]] + 1;
} else{
mx = Math.max(mx, i - start + 1);
}
chars[s[i]] = i;
}
return mx;
};
抖音网红
反向建立有向图,逐个dfs,dfs返回路径等于人数,则计数加一
var Graph = (function () {
function Graph(v) {
this.vertices = v;
this.edges = 0;
this.adj = [];
this.marked = [];
for (var i = 0; i < this.vertices; i++) {
this.adj[i] = [];
this.marked[i] = false;
}
}
Graph.prototype.addEdge = function (v, w) {
this.adj[v].push(w);
this.edges += 1;
}
// search
function _dfs(v, path) {
this.marked[v] = true;
if (this.adj[v] != undefined) {
path.push(v);
}
this.adj[v].forEach(element => {
if (!this.marked[element]) {
_dfs.call(this, element, path);
}
});
}
Graph.prototype.dfs = function (v) {
for (var i = 0; i < this.vertices; i++) {
this.marked[i] = false;
}
var path = [];
_dfs.call(this, v, path);
return path;
}
return Graph;
})();
// 读取数据
var readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
var N, M;
var curLine = 0;
var g;
rl.on('line', function (line) {
if (curLine === 0) {
N = parseInt(line.trim());
g = new Graph(N + 1);
} else if (curLine === 1) {
M = parseInt(line.trim());
}else if(curLine === 2){
var arr = line.trim().split(' ');
for (var i = 0; i < M * 2; i+=2) {
arr[i] = parseInt(arr[i]);
arr[i + 1] = parseInt(arr[i + 1]);
g.addEdge(arr[i + 1], arr[i]);
}
var cnt = 0;
for (var i = 1; i <= N; i++) {
var tmp = g.dfs(i);
if(tmp.length === N){
cnt++;
}
}
console.log(cnt);
rl.close();
}
curLine++;
});
.分几个部门
题目描述:
本公司有很多团队,现在要将关系紧密的团队放到同一个部门。给定一个M*M的二维数组,如:
4
0 1 1 0
1 0 0 0
1 0 0 1
0 0 1 1
其中4表示二维数组的大小,1代表一个团队,上下或左右相连的1(团队)表示其关系紧密,求最后分出的部门数。
输入描述:
第一行第一个整数表示M(M<1000),
后面每一行表示团队之间的关系分布,如上所示的数阵
输出描述:
一个整数
示例:
输入:
4
0 1 1 0
1 0 0 0
1 0 0 1
0 0 1 1
输出:
3
var readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
var M = 0;
var curLine = 0;
var input = [];
rl.on('line', function (line) { // javascript每行数据的回调接口
if(curLine === 0){
M = parseInt(line.trim());
}else{
input.push(line.trim().split(' '));
if(curLine === M){
console.log(func(input));;
rl.close();
}
}
curLine++;
});
function func(input){
var cnt = 0;
for(var i = 0; i < input.length; i++){
for(var j = 0; j < input[0].length; j++){
if(input[i][j] == 1){
visit(input, i, j);
cnt++;
}
}
}
return cnt;
}
// 递归遍历上下左右节点,访问后直接置零
function visit(input, i, j){
input[i][j] = 0;
if(i-1 >= 0 && input[i-1][j] == 1){
visit(input, i-1, j);
}
if(i+1 < input.length && input[i+1][j] == 1){
visit(input, i+1, j);
}
if(j-1 >= 0 && input[i][j-1] == 1){
visit(input, i, j-1);
}
if(j+1 < input[0].length && input[i][j+1] == 1){
visit(input, i, j+1);
}
}