算法分析(含答案)笔试题 (4)

手写 9x9 乘法表,冒泡排序
9x9 乘法表: class Demo {
public static void main(String[] args) {
for(int x = 0;x <= 9; x++) {
for(int y = 1;y <= x; y++) {
System.out.print(y+""+x+"="+xy+"\t");
}
System.out.println();
}
}
}
冒泡排序: public class BubbleSort{
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){//最多做 n-1 趟
排序
for(int j = 0 ;j < score.length - i - 1; j++){//对当
前无序区间 score[0......length-i-1]进行排序(j 的范围很关键,这个范围
是在逐步缩小的)
if(score[j] < score[j + 1]){ //把小的值交换到后面
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
System.out.print("第" + (i + 1) + "次排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
} } }

题目: 给定一个整数数组,找到是否该数组包含任何重复数字。你的函
数应该返回 true 只要有任何数字 在该数组中重复出现,否则返回 false。 public class Solution {
public boolean containsDuplicate(int[] nums) {
Set numSet = new HashSet();
for(int i=0;i<nums.length;i++){·
if(numSet.contains(nums[i]))
return true;
else
numSet.add(nums[i]);
}
return false;
} }

给定一个数组 nums, 写一个函数来移动所有 0 元素到数组末尾,同时
维持数组中非 0 元素的相对顺序不变。要求不能申请额外的内存空间,并且
最小化操作次数。
public void moveZeroes(int[] nums) {
int size = nums.length;
int startIndex = 0;
// 0 元素开始的位置
int endIndex = 0;
// 0 元素结束的位置
int currentNum;
int i= 0;
// 第一步:找到第一个 0 元素开始的位置
// 并将第一个 0 元素的游标赋值给 startIndex&endIndex
while(i < size){
currentNum = nums[i];
if (currentNum == 0) {
startIndex = i;
endIndex = i;
break;
}
++i;
}
// 如果当前数组中没有找到 0 元素,则推出
if (nums[endIndex] != 0)
return;
// 将当前 i 的值加 1;直接从刚才 0 元素位置的后一位置开始循环
++i;
while (i < size) {
currentNum = nums[i];
if (currentNum == 0){//如果当前元素等于 0,则将 i 值赋值
给 endIndex
endIndex = i;
} else {
// 如果不为 0
//则将当前元素赋值给 nums[startIndex]
// 并将当前位置的元素赋值为 0
// startIndex 和 endIndex 都加 1;
nums[startIndex] = currentNum;
nums[i] = 0;
++startIndex;
++endIndex;
}
++i;
}
}

给定一颗二叉树,返回节点值得先序遍历,请使用迭代(非递归)方式
实现。
public class Solution {
public List preorderTraversal(TreeNode root) {
List result = new ArrayList();
if(root == null)
return result;
Stack stack = new Stack();
stack.push(root);
while(!stack.isEmpty()) {
TreeNode node = stack.pop();
result.add(node.val);
if(node.right != null)
stack.push(node.right);
if(node.left != null)
stack.push(node.left);
}
return result;
}
}

验证一棵树是否为有效的二叉搜索树 BST
public class Solution {
private static int lastVisit = Integer.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if(root == null) return true;
boolean judgeLeft = isValidBST(root.left); // 先判断左子

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfxsw.html