当前位置: 首页 > 面试经验 >

面试常问的算法题整理

优质
小牛编辑
185浏览
2023-03-28

面试常问的算法题整理

1、 给定一个字符串,逐个翻转字符串中的每个单词

l1 = "This is a good example".split(" ")
print(l1)

l2 = []
new_str = ""
for i in l1:
l2.append(i)
print(l2)

n = 0
while l2:
if n == 0:
new_str += l2.pop()
else:
new_str += " " + l2.pop()
n += 1
print(new_str)

2、 判断数组中所有的数字是否只出现一次

arr = [1, 2, 3, 1]
d1 = {}
status = True
for i in arr:
if not d1.get(i):
d1[i] = 1
status = True
else:
status = False
break

print(status)

3、 无重复字符的最长子串

public static int lengthOfLongestSubstring(String s) {
if (s.equals(" ")){
return 1;
}
// 滑窗
LinkedList linkedList = new LinkedList();
// 最大互异连续子串大小
int size = 0;
char[] chars = s.toCharArray();
for (int i = 0; i
if (!linkedList.contains(chars[i])){
linkedList.addLast(chars[i]);
size = linkedList.size() > size ? linkedList.size() : size;
}else {
size = linkedList.size() > size ? linkedList.size() : size;
while (linkedList.removeFirst() != chars[i]){}
linkedList.addLast(chars[i]);
}
}
return size;
}

4、反转链表

/**
* @Author Liruilong
* @Description 链表反转
* @Date 16:58 2019/9/2
* @Param [listNode1]
* @return void
**/
public static void linkInt(ListNode listNode1){
// 链表的反转,
// 思路一: 递归反转法,在反转当前节点之前先反转后续节点,从头节点开始
// 思路二:遍历反转法: 从前往后反转各个节点的指针域指向.
}
// 递归反转
public static ListNode Reverse(ListNode listNode){
if ( listNode == null || listNode.next ==null){
return listNode;
}
ListNode reNode = Reverse(listNode.next);
listNode.next.next = listNode;
listNode.next = null;
return reNode;
}
// 遍历反转
public static ListNode Reverses(ListNode listNode){
if (listNode == null){
return listNode;
}
// 上一节点
ListNode prt = listNode;
// 当前节点
ListNode cur = listNode.next;
// 临时节点
ListNode temp ;
while (cur != null){
temp = cur.next;
cur.next = prt;// 反转指针域的指向
prt = cur; // 指针往下移动
cur = temp;
}
listNode.next = null;
return prt;
}

5、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标

class Solution {
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++){
for (int j = i + 1; j <nums.length; j++){
if (nums[i] + nums[j] == target){
return new int[]{i,j};
}
}

}
return new int[]{};
}

6、二叉树的最近公共父亲节点

public class Solution {  
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//发现目标节点则通过返回值标记该子树发现了某个目标结点
if(root == null || root == p || root == q) return root;
//查看左子树中是否有目标结点,没有为null
TreeNode left = lowestCommonAncestor(root.left, p, q);
//查看右子树是否有目标节点,没有为null
TreeNode right = lowestCommonAncestor(root.right, p, q);
//都不为空,说明做右子树都有目标结点,则公共祖先就是本身
if(left!=null&&right!=null) return root;
//如果发现了目标节点,则继续向上标记为该目标节点
return left == null ? right : left;
}
}

7、写一个函数,找出一个整数数组中,第二大的数

function bubbleSort(arr){

  var len = arr.length;

  for(var i=0; i<len; i++){ //总共需要比较的轮数

    for(var j=0; j<len-1-i; j++){ // 每一轮需要进行比较的数字

      if( arr[j]<arr[j+1]){ // 相邻元素相比,小的移至到右边

       var temp = arr[j+1];

       arr[j+1] = arr[j];

       arr[j] = temp;

      }

    }

  }

return arr[1];

}

算法题基本在面试时都会遇到,因为他是对我们代码能力的直观体现,可以这样说,如果在面试时算法题写不出来,甚至连大体思路都讲不出来,那面试想通过就比较难了,所以大家需要好好准备,为了节省大家的时间,我帮大家整理好了(看这里 ),拿下offer就看它了!

#Android##算法##面试##秋招##算法工程师#
 类似资料: