1.给出一个字符串,显示出字符串里重复次数最多的元素,并显示次数出来
如:"sdoiokasdhdiuwasad"
输出: 出现最多:d 出现次数:4
1 function remenber(str){ 2 var o = {}; 3 for (var i = 0; i < str.length; i++) { 4 if (o[str[i]]) { //char就是对象o的一个属性,o[char]是属性值,o[char]控制出现的次数 5 o[str[i]]++; //次数加1 6 } else { 7 o[str[i]] = 1; //若第一次出现,次数记为1 8 } 9 } 10 console.log(o); //输出的是完整的对象,记录着每一个字符及其出现的次数 11 //遍历对象,找到出现次数最多的字符和次数 12 var max = 0; 13 for (var key in o) { 14 if (max < o[key]) { 15 max = o[key]; //max始终储存次数最大的那个 16 } 17 } 18 for (var key in o){ 19 if (o[key] == max){ 20 //console.log(key); 21 console.log("最多的字符是" + key); 22 console.log("出现的次数是" + max); 23 } 24 } 25 } 26 remenber("sdoiokasdhdiuwasad");
2.给出一个数组,数组中的元素最多可以出现两次
1 function newarr(arr){ 2 var tmp = []; 3 var str = ","; 4 for(var i = 0; i < arr.length; i++){ 5 var sm = str.match(new RegExp(","+arr[i]+",", "g")); 6 if(!sm || sm.length < 2) { 7 tmp.push(arr[i]); 8 str += arr[i] + ","; 9 } 10 } 11 console.log("原数组是:" + arr); 12 console.log("清除后的数组:"+tmp); 13 } 14 newarr([12,34,5,6,32,12,34,56,5,12,34]);
3.给出一个数组,求这个数组的最大和
如[34,5,1,22],输出534221
function a(arr){
var st = [];
var res = [];
for(var i=0; i < arr.length; i++){ //将数组元素转换为string类型
var arr1 = arr[i].toString();
st.push(arr1);
}
console.log(st[1][0]);
for(var j = 0; j < arr.length-1; j++){ //用冒泡排序将数组的元素的第一个数进行排序的到从小到大的排序
for(var k = 0; k < arr.length-j-1; k++){
if(st[j][0] > st[j+1][0]){
var temp = st[k];
st[k] = st[k+1];
st[k+1] = temp;
}
}
}
for(var c = st.length; c >= 0; c--){//将冒泡排完序后的到的数组进行倒序排序
res.push(st[c]);
}
console.log(res.join(""));//最后合并元素
}
a([12,23,34,5]);
4、给一个有序数组创建二叉搜索树
var Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var Tree = createTree(Array);
console.log(Tree);
// 构造一个节点
function Node(nodeData, leftData, rightData) {
this.nodeData = nodeData;
this.leftData = leftData;
this.rightData = rightData;
}
// 每次取中点作为根节点,向左和向右递归
function createTree(array) {
if (array.length <= 0) {
return null;
} else {
var mid = parseInt(array.length / 2);
var node = new Node(array[mid], null, null);
var leftArray = array.slice(0 , mid);
var rightArray = array.slice(mid + 1 , array.length );
node.leftData = createTree(leftArray);
node.rightData = createTree(rightArray);
return node;
}
}
5、JS快速排序
function quicksort(arr){
if(arr.length <= 1){
return arr;
}
var mid = Math.floor(arr.length/2);
//用于确定中间基数在arr中的位置
var andtwo = arr.splice(mid,1)[0];
//用于作连接left和right两个数组的中间基数
var left = [];
var right = [];
for(var i = 0; i < arr.length; i++){
if(arr[i] > andtwo){
right.push(arr[i]);
}else{
left.push(arr[i]);
}
}
return quicksort(left).concat([andtwo],quicksort(right));
}
console.log(quicksort([12,4,43,16,34,76,8,97]));
6、给一个字符串如as-ds-aw-gfde-ioa,用一个函数实现输出结果为as-Ds-Aw-Gfde-Ioa
function toUp(str){
var mixstr = str.split("-");//将str拆分
var res = [mixstr[0]];//创建新数组用于存放转换好的元素,因为第一个不需要转换,所以直接存放进去了
for(var i = 1; i < mixstr.length; i++){
var resone = mixstr[i][0].toUpperCase() + mixstr[i].substring(1,mixstr[i].length);//将str里的单个字符串转换成首字母为大写的形式
res.push(resone);
}
var outstr = res.join("-");
console.log(outstr);
}
toUp("as-ds-aw-gfde-ioa");
7、实现一个算法,随机生成指制定长度的字符窜。
比如给定 长度 8 输出 2debl8xp
function randomString(n) {
let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
let tmp = '';
for (var i = 0; i < n; i++) {
tmp += str.charAt(Math.floor(Math.random() * str.length));
}
console.log(tmp);
}
randomString(8);