长话短说,一共四道编程题,两小时。写出的最优解能够通过测试用例

一、题目名称:奇偶排序

需求:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数

解决:

class Solution {
solution(n, arr) {
var result;
//<-- 这下面是你的代码
let arr1=arr.filter(item => item%2!==0);
let arr2=arr.filter(item => item%2===0);
result = arr1.concat(arr2);
//这上面是你的代码-->
return result;
}
}
var str_0 = readline().trim();
var n = parseInt(str_0);
var str_1 = readline();
var line_list_1 = str_1.trim().split(" ");
var arr = new Array();
for(var i = 0; i < line_list_1.length; i++){
arr[i] = parseInt(line_list_1[i]);
}
let sol = new Solution();
result = sol.solution(n, arr);
print(result.join(" "));

解析:此题用还是比较简单,用了filter()和cancat即可。此题还可以变化为:奇偶排序一前一后放入进去、奇数升序在左偶数升序在右边

二、题目名称:小艺照镜子

需求:已知字符串str。 输出字符串str中最长回文串的长度。

解决:

class Solution {
solution(s) {
var result;
let size = s.length;
let start = 0;
let len = 0;
for(let i=0;i<size;i++){
let left=i-1;
let right=i+1;
while(left>=0&&right<size&&s[left]==s[right]){
left--;
right++;
}
if(right-left-1>len){
start=left+1;
len=right-left-1;
}
}
for(let i=0;i<size;i++){
let left=i;
let right=i+1;
while(left>=0&&right<size&&s[left]==s[right]){
left--;
right++;
}
if(right-left-1>len){
start=left+1;
len=right-left-1;
}
}
result = s.slice(start,start+len).length;
return result;
}
}

var str_0 = readline().trim();
var s = str_0;
let sol = new Solution();
result = sol.solution(s);
print(result);

三、题目名称:交换后的or

需求:给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的 结果发生改变?

解决:

四、题目名称:去除整数

需求:已知存在集合A包含n个整数,从1到n。 存在m个整数a[1..m]。 在集合A中去除这m个整数的的倍数。 输出集合中包含 的元素的个数。

解决: