3、列出一个String字符串中的字母的所有组合方式
/**算法设计:
*设置两个变量,一个用于保存需要排列的字符串,即oldString,一个用于保存已经排好的字符串,即outString,每排好一个字符后,就从oldString里将这个字符拿掉,在outString里将这个字符保存起来,然后对oldString中剩下的字符串在进行下一轮循环,这样一直循环,直到oldString为空,一个新的字符串就排列好了;例如:要对“ABC”进行排列,对“ABC”进行循环,先拿出一个“A”放入outString中,outString为“A”,oldString中就剩下“BC”,然后对oldString(现在为“BC”)进行循环,先把“B”放入outString,outString为“AB”,oldString中剩下“C”,再对oldString(现在为“C”)进行循环,将“C”放入outString,outString为“ABC”,oldString为空,将排好的“ABC”放入Set集合,然后退回上次循环,将“C”放入outString,outString为“AC”,oldString为“B”,对oldString进行循环,将“B”放入outString,outString为“ACB”,oldString为空,将排好的“ACB”放入Set集合,然后退回第二层循环,第二层循环的两次循环也结束了,退回第一层循环,将“B”放入outString,outString为“B”,oldString为“AC”,然后对oldString进行如前面所进行的循环,知道第一层循环也结束后,整个排列完成。
*/
public Set<String> creatStrings(String oldString,String outString){
Set<String> newStr = new HashSet<String>();
//判断oldString是否为空
if(oldString.length()<=0){
newStr.add(outString);
}
//对oldString进行循环
for(int i=0;i<oldString.length();i++){
//递归循环
Set<String> tempSet = creatString(new StringBuffer(oldString).deleteCharAt(i),outString+oldString.charAt(i));
newStr.addAll(tempSet);
}
return newStr;
}
4、有1到100000共10000个整数,从中任意拿掉2个,将剩下的99998个放入一个数组中,如何快速的找到被拿掉的那两个数,要求时间复杂度为O(n)
/**算法设计:
*这个题没说这数字是否是有序的,如果是有序的就非常好做,对这个数组进行进行遍历,后面的数减去前面的数如果不等于1,则拿掉的数就在这两个数之间
如果这99998个数字是无序的,而且不能对该数组进行排序,那么,先将原来的100000个数字放到一个数组中,再将99998个数字放到一个Set集合中,然后遍历这100000个数字,将其放入Set集合,如果能够放入则表示该数字是被拿掉的,如果不能放入,则表示该数字没有被拿掉
*/
public void findNum(){
Set<Integer> numSet = new HashSet<Integer>();
for(int i=1;i<100000;i++){
numSet.add(i);
}
int[] numArr = numSet.toArray();
numSet.remove((int)Math.random() * 100000);
numSet.remove((int)Math.random() * 99999);
for(int i=0;i<numArr.length;i++){
boolean f = numSet.add(numArr[i]);
if(f){
System.out.println("拿到的数字为:"+numArr[i]);
}
}
}
分享到:
相关推荐
数据结构算法笔试题汇总 本资源摘要信息是关于数据结构和算法的笔试题汇总,涵盖了数据结构和算法的基础知识、常见题型和解题思路。 数据结构基础知识 数据结构是一门计算机科学中研究数据的逻辑结构、对各种数据...
- **问题描述**:一对兔子从第三个月开始每个月都会产下一对新兔子,而新生的兔子会在第四个月开始也每个月产下一对兔子。假设所有兔子都不会死亡,求每个月的兔子总数。 - **解决方法**:此问题可以用递归或迭代的...
从描述中可知,这份试卷分为四个部分: 1. 单选题10道:这通常会涵盖雷达技术的基础知识,包括雷达的工作原理、信号处理基础、雷达方程、脉冲压缩、多普勒效应等基础概念。 2. 多选题5道:这些题目可能会涉及更深入...
本资源包含了阿里巴巴最新的算法工程师笔试题,涵盖了算法、数据结构、计算机系统、概率论、统计学等多个领域。以下是对每道题目的解释和知识点总结: 1. 程序输出结果: 知识点:C++继承和多态、构造函数、虚函数...
数据结构与算法笔试题考点分析 数据结构与算法是计算机科学的基础课程,对计算机科学和技术专业的学生来说是非常重要的。数据结构与算法笔试题考点分析是指对数据结构与算法考试的内容和要求进行的系统性分析和总结...
【算法笔试题解析】 1. 寻找最大两个数最少比较次数:答案是 c. n + logn -2。这是因为在最坏情况下,需要遍历所有元素并每次找到当前最大值,然后再找到第二大的值。 2. 二维数组访问:答案是 b. *(*(a+i)+j)。在...
本资源总结了小米2019秋招算法笔试题,涵盖了算法、数据结构、机器学习、线程和进程等多个领域。题目涉及二叉树的遍历、排序算法、贪心算法、机器学习中的正则化、线程和进程的概念等。通过本资源,可以了解小米秋招...
vivo2019校招图像算法工程师笔试题 本资源是 vivo 2019 年的校招图像算法工程师笔试题,涵盖了算法、数据结构、机器学习等方面的知识点。 知识点 1:循环语句 在编程语言中,循环语句是非常重要的一种控制结构。...
在2014年的校招笔试中,应聘者可能面临了各种类型的算法问题,涵盖了数据结构、排序、搜索、图论等多个核心领域。 一、数据结构基础 数据结构是算法的基础,包括数组、链表、栈、队列、树、图等。在笔试中,可能会...
【算法笔试题详解】 在软件公司的招聘过程中,算法笔试题是评估候选人技术能力的重要环节。以下是一些典型的算法题目及其解析: 1. **整数逆序存储** 这道题要求递归地将整数逆序存储到数组中。`convert`函数通过...
四、编程和算法设计题 1. 打印一个数组中元素的所有组合 该题目考察了候选人的编程能力和算法设计能力。可以使用递归算法或动态规划算法来解决该问题。 2. 找出数组中t的位置 该题目考察了候选人的算法设计能力...
每次尝试沿着四个方向之一移动,如果移动合法(即不在障碍上),则继续搜索,直到找到出口或遍历完整个迷宫。 这些题目考察了基本的编程技巧和算法理解,包括递归、循环、字符串处理、数学逻辑以及图论中的路径搜索...
阿里巴巴作为中国知名的互联网巨头,对实习生的技术要求自然不低,其笔试题目往往涵盖了算法、操作系统、数据结构等多个核心计算机科学领域。以下是对这些题目详细解析: 一、倒序排列数组元素 这是一个基础的编程...
软件工程师经典笔试算法题是软件工程师面试中经常出现的算法笔试题,这篇文章将从六个方面对软件工程师经典笔试算法题进行详细的讲解。 一、将一整数逆序后放入一数组中 这个算法题考察了软件工程师对递归编程的...
本资源摘要信息涵盖了算法岗笔试的多个知识点,以下是对其进行详细的解释和分析: 一、机器学习基础知识点 1.机器学习的 bias-variance tradeoff:题目中出现了 bias^2+variance 和 bias+variance^0.5 两种形式的...
根据给定的文件信息,以下是对每一道算法题目进行详细解析与知识点的总结: ...这些题目涵盖了递归、字符串操作、数组处理、组合问题等常见算法知识点,对于准备IT公司笔试的同学来说是非常好的练习材料。
给出的代码使用了DFS,通过四个方向(上、下、左、右)的邻接矩阵来探索迷宫。当遇到通路'o'时,继续探索;遇到障碍'X'则回溯。这体现了图论中的DFS算法和邻接矩阵的概念。 以上六个题目均属于计算机科学基础算法的...
一家公司招聘时,尤其是对于应届毕业生,常常会通过算法笔试来评估候选人的编程基础和逻辑思维能力。这是因为算法能够直接反映出应聘者的编程素质,包括数据结构的理解、问题解决策略以及代码的优化能力。 【逆序...
四、填空题可能涉及的细节 填空题通常会测试考生对具体概念的理解和记忆,可能的问题包括但不限于: 1. 某种编码标准的具体参数配置。 2. 音频编码过程中的特定步骤或算法。 3. 视频压缩中的特定术语,如宏块、宏...