15道常见的基础算法题:
1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
2、合并两个已经排序的单链表;
3、倒序打印一个单链表;
4、给定一个单链表的头指针和一个指定节点的指针,在O(1)时间删除该节点;
5、找到链表倒数第K个节点;
6、反转单链表;
7、通过两个栈实现一个队列;(没有贴出来)
8、二分查找;
9、快速排序;
10、获得一个int型的数中二进制中1的个数;
11、输入一个数组,实现一个函数,让所有奇数都在偶数前面;
12、判断一个字符串是否是另一个字符串的子串;
13、把一个int型数组中的数字拼成一个串,这个串代表的数字最小;
14、输入一颗二叉树,输出它的镜像(每个节点的左右子节点交换位置);
1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
2、合并两个已经排序的单链表;
3、倒序打印一个单链表;
4、给定一个单链表的头指针和一个指定节点的指针,在O(1)时间删除该节点;
5、找到链表倒数第K个节点;
6、反转单链表;
7、通过两个栈实现一个队列;(没有贴出来)
8、二分查找;
9、快速排序;
10、获得一个int型的数中二进制中1的个数;
11、输入一个数组,实现一个函数,让所有奇数都在偶数前面;
12、判断一个字符串是否是另一个字符串的子串;
13、把一个int型数组中的数字拼成一个串,这个串代表的数字最小;
14、输入一颗二叉树,输出它的镜像(每个节点的左右子节点交换位置);
15、输入两个链表,找到它们第一个公共节点;
经过了测试,不过肯定有考虑不周全的,有些答案估计也不是最优解,比如第13道题。直接贴代码,思路应该都还比较简单。
<span style="font-size:14px;">package org.whut.choumiaoer.write;
/**
* 合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
*/
public class mergeSortedArray {
public void merge(int[] A,int m,int[] B,int n){
int i=m-1;
int j=n-1;
int t=m+n-1;
while(t>0){
if(j<0||(j>=0&&A[i]>B[j])){
A[t--]=A[i--];
}else{
A[t--]=B[j--];
}
}
for(int s=0;s<m+n;s++){
System.out.print(A[s]+" ");
}
}
}</span>
<span style="font-size:14px;">package org.whut.choumiaoer.write;
import org.whut.choumiaoer.linked.basic.ListNode;
/**
* 合并两个已经排序的单链表
*/
public class mergeSortedListNode {
public static ListNode merge(ListNode p1,ListNode p2){
ListNode head=new ListNode(0);
ListNode p=head;
while(p1!=null&&p2!=null){
if(p1.val<p2.val){
p.next=p1;
p1=p1.next;
}else{
p.next=p2;
p2=p2.next;
}
p=p.next;
}
if(p1==null){
p.next=p2;
}
if(p2==null){
p.next=p1;
}
return head.next;
}
}
</span>
<span style="font-size:14px;">package org.whut.choumiaoer.write;
import org.whut.choumiaoer.linked.basic.ListNode;
/**
* 反转单链表
*/
public class ReOrderListNode {
public static ListNode reOrder(ListNode head){
if(head==null){
return head;
}
ListNode p=head;
ListNode p1=head.next;
p.next=null;
while(p1!=null){
ListNode p2=p1.next;
p1.next=p;
p=p1;