博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试问题集锦
阅读量:4145 次
发布时间:2019-05-25

本文共 2904 字,大约阅读时间需要 9 分钟。

1.1        在成对存在的数组中(即数组中的每个数必然存在另一个与其值相等的一个数),被程序员误插入了一个数(即该数在这个数组中唯一),如何找出这个数?  

 

答案:将所有数化为二进制,做异或。

 

   1.2        在成对存在的数组中(即数组中的每个数必然存在另一个与其值相等的一个数),被程序员误插入了两个数(即这两个数在这个数组中都是唯一),如何找出这两个数?  

 

答案:异或所有数,所得结果相当于混入的这两个数的异或,取其不为0的某一位,按照这一位将数组元素分成两组(一组为0,一组为1),两组组内异或,分别得到这两个数。 题目来源剑指offer《数组中只出现一次的数字》

//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution {    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {        //任何一个数异或自己都为0,最后只剩下两个出现一次的数的异或值        int s=0;        for(int i=0;i
>indexOf1; return (i&1); } private int FindFirstBitIs1(int s) { // TODO Auto-generated method stub int indexBit=0; while((s&1)==0) { indexBit++; s=s>>1; } return indexBit; } }

 

   2.1        给定一个数组a[],一次遍历在其中找出最大(最小)的元素。  

 

答案:冒泡排序。

   2.2        给定一个数组a[],找出其中某两个数的和等于给定的一个数M。  

      

答案:首先快排(从小到大),然后头尾两个指针,若头尾指向的数之和大于M,尾指针减减,否则头指针加加。

   2.3        给定一个数组a[],在其中找k个数(k>=2),使得其和等于给定的一个数M,没有返回false。 (个人还没验证) 

 

答案:动态规划-01背包问题。

  3.1        四人过桥问题:速度设为v1,v2,v3,v4,满足v1>v2>v3>v4单独过河时间满足:t1<      t2 < t3 < t4,此时正在下雨,四人只有一把伞,于是两人共有一把伞过河,过桥速度以最慢的为主,过河后需要其中一个送伞回去,问如何安排过河时间最短?  

 

答案:方案一:正常思维会认为v1速度最快,让他每次回头送伞最合适,于是v1分别与其他人过河再回头送伞,总时间:t2+t3+t4+2*t1。

方案二:考虑到v1>v2>>>v3>v4(即v1、v2远远大于v3、v4),可以让v1、v2先过河,v1回头送伞,v3、v4一起过河,v2回头送伞,然后v1、v2再过河,

总时间:t2+t1+t4+t2+t2。

综合考虑,本题回答动态规划为最佳答案。

4.二叉树按行打印  

 

答案:这是一道老题了,首先注意是按行打印,判断何时需要换行,实现的时候需要一个队结构,我是用链表实现的,其次改造node结点,在原基础上加一个line标记,表示该结点是第几行的,具体实现:初始化:树根入队,定义变量current(当前行)为1,打印树根,然后判断树根的左孩子和有孩子是否为空,依次入队,递归调用。

伪代码:  current=1;front=T; rear=front.next;

           Public A( root) {

              If(front.next==null){return ;}//树根为空,退出

              If(root.flag==(current+1)){ 换行}//当前结点的标志位等于当前行数加一,该换行了;

              Print(root.data);  //打印值

              If(root.left!=null){ //加入左孩子

                 rear.flag=Root.flag+1; //标记结点行数

                 rear=Root.left;

                 Rear=Rear.next;

                }

              If(root.right!=null){ //加入右孩子

                 rear.flag=Root.flag+1; //标记结点行数

                 rear=Root.right;

                 Rear=Rear.next;

                }

              A(front);  //递归调用

           }

剑指offer原题《从上往下打印二叉树》

思路:利用队列思想

import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {  public ArrayList
PrintFromTopToBottom(TreeNode root) { ArrayList
list = new ArrayList
(); if (root == null) return list; Queue
queue = new LinkedList
(); queue.offer(root); while (!queue.isEmpty()) { root = queue.poll(); if (root.left != null) queue.offer(root.left); if (root.right != null) queue.offer(root.right); list.add(root.val); } return list; }}

5.给你四个坐标(x,y)判断是否为矩形?  

 

答案:取一个点,与其他三个点求距离,看是否满足勾股定理,然后计算余弦值,只要存在负数,就说明有钝角,return FALSE,否则为真。

6.给定一个数组,从中取三个值,将数组分成四个部分(不包含这三个值),使得四个部分每个部分之和相等。如以下数组:1213151,取出的三个值分别为:2,3,5。  题目来源阿里巴巴的春招实习生上机测试题

 

答案:暴力法:设置三个指针,i1、i2、i3,四个和值:sum1、sum2、sum3、sum4,分别表示0~i1(不含i1),0~i2(不含i1,i2),0~i3(不含i1,i2,i3),数组总和(不含i1,i2,i3),三层循环,最终找出满足一下关系式:4sum1=2sum2=(4/3)    * sum3=sum4。

转载地址:http://oqbti.baihongyu.com/

你可能感兴趣的文章
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>
Commit our mod to our own repo server
查看>>
LOCAL_PRELINK_MODULE和prelink-linux-arm.map
查看>>
Simple Guide to use the gdb tool in Android environment
查看>>
Netconsole to capture the log
查看>>
Build GingerBread on 32 bit machine.
查看>>
How to make SD Card world wide writable
查看>>
Detecting Memory Leaks in Kernel
查看>>
Linux initial RAM disk (initrd) overview
查看>>
Timestamping Linux kernel printk output in dmesg for fun and profit
查看>>
There's Much More than Intel/AMD Inside
查看>>