大公司面试经典数据结构与算法题C#/Java解答
几个大公司(IBM、MicroSoft and so on)面试经典数据结构与算法题C#解答
1.链表反转
我想到了两种比较简单的方法
第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表中(也就是原链表第一个元素被插入成新链表的最后一个元素)。
第二种是不需要开新的链表,而是逐步反转原链表中元素的指向,例如:
原链表是 1->2->3->4->null 被 逐步修改为 ①2->1->null、3->4->null ②3->2->1->null、4->null ③4->3->2->1->null
最后再将head指向4。
namespace 链表反转
{
class Node
{
public int Num { get; set; }
public Node Next { get; set; }
}
class Program
{
static void Main(string[] args)
{
NodeList list = new NodeList();
list.Add();
list.Add();
list.Add();
list.Add();
list.Add();
list.Reverse1();
list.Print(); NodeList list1 = list.Reverse();
list1.Print(); Console.ReadKey();
}
} class NodeList
{
public Node Head { get; set; }
public void Add(int num)
{
if (Head == null)
{
Head = new Node();
Head.Next = new Node() { Num = num };
}
else
{
Node tn = Head;
while (tn.Next != null)
{
tn = tn.Next;
}
tn.Next = new Node() { Num = num };
}
} public void Print()
{
Node tn = Head;
while(tn.Next!=null)
{
tn = tn.Next;
Console.WriteLine(tn.Num);
}
} //需要开新链表的反转
public NodeList Reverse()
{
NodeList list = new NodeList();
Node tn = Head;
Node newTn = null;
while (tn.Next != null)
{
tn = tn.Next;
if (newTn == null)
{
newTn = new Node() { Num = tn.Num };
}
else
{
newTn = new Node() { Num = tn.Num,Next=newTn };
}
}
list.Head = new Node();
list.Head.Next = newTn;
return list;
} //不需要开新链表的反转
public void Reverse1()
{
Node n1 = Head.Next;
Node n2 = Head.Next.Next;
//第一个节点也就是反转后的最后一个节点,Next要指向null
Node first = Head.Next;
first.Next = null;
//如果链表为空或者链表只有一个元素那就无需调整
if (n2 == null || n1 ==null)
{
return;
}
//先用Head指向n2的下一个元素,再将n2的Next指向n1,最后将n1和n2向右移动
while (n2.Next != null)
{
Head.Next = n2.Next;
n2.Next = n1;
n1 = n2;
n2 = Head.Next;
}
//最后要将头结点指向链表反转前的最后一个元素
Head.Next = n2;
//因为判断条件只调整到最后一个元素的前一个元素,所以要调整最后一个元素的Next指向
n2.Next = n1;
}
}
2.字符串查找第一个不重复的字母
基本原理:第一遍遍历字符串时,用hash表存储每个字符出现的次数,第二遍遍历字符串时,筛选出第一个hash中对应保存的出现次数为1的字符。
namespace 字符串查找第一个不重复的字母
{
class Program
{
static Hashtable hash = new Hashtable();
static void Main(string[] args)
{
string s = "asfgasjfoiwoeqkwzxc";
Count(s);
Console.WriteLine(Search(s));
Console.ReadKey();
} static void Count(string s)
{
for (int i = ; i < s.Length; i++)
{
if (hash.Contains(s[i]))
{
hash[s[i]] = (int)hash[s[i]]+;
}
else
{
hash[s[i]] = ;
}
}
} static char Search(string s)
{
for (int i = ; i < s.Length; i++)
{
if ((int)hash[s[i]] == )
{
return s[i];
}
}
return '#';
}
}
}
3.有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现
基本原理:找到正负数分界点0,如果存在就是0,不存在就比较它左右两个数的绝对值。
(PS:为了方便我写到一个JUnit方法中)
public class testAlgorithm {
@Test
public void Fun(){
int[] a = {-8,-7,-5,1,3,5}; int middle = (a.length-1)/2;
int result = middle; if (a[middle]==0){
System.out.println("The smallest number is "+a[middle]);
return;
}
//find the demarcation point
else{
if(a[result]>0){
while(a[result]>0){
result = result - 1;
}
if(Math.abs(a[result])>a[result+1]){
System.out.println("The smallest number is "+a[result+1]);
return;
}
else{
System.out.println("The smallest number is "+a[result]);
return;
}
}
else{
while(a[result]<0){
result = result + 1;
}
if(a[result]>Math.abs(a[result+1])){
System.out.println("The smallest number is "+a[result+1]);
return;
}
else{
System.out.println("The smallest number is "+a[result]);
return;
}
} } } }
大公司面试经典数据结构与算法题C#/Java解答的更多相关文章
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...
- C基础 北京大公司面试简单总结
作者有话说 这是关于程序员面试的一篇文章, 希望对你有帮助. 干了快3年了. 可以简单参考, 对比总结.虽然本人很水. 很喜欢当前做的手游项目.做的很认真.后端每个人技术都很好.但是结果都不如意.在死 ...
- JAVA集合类(大公司面试喜欢问的)
分类: 核心JAVA(11) 版权声明:本文为博主原创文章,未经博主允许不得转载. 看了一些所谓大公司的Java面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少 ...
- 面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集
Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...
- php面试之数据结构和算法
二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...
- [2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- 提前批笔试一道算法题的Java实现
题目描述 这是2021广联达校招提前批笔试算法题之一. 我们希望一个序列中的元素是各不相同的,但是理想和显示往往是有差距的.现在给出一个序列A,其中难免有相同的元素,现在提供了一种变化方式,使得经过若 ...
- FPGA大公司面试笔试数电部分,看看你会多少
1:什么是同步逻辑和异步逻辑?(汉王) 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系. 答案应该与上面问题一致 [补充]:同步时序逻辑电路的特点:各触发器的时钟端全部连接 ...
随机推荐
- Spring 中配置log4j日志功能
一,添加log4j依赖包 可从官网上下载该依赖包log4j-x.x.xx.jar,下载后 build path,添加依赖包 二,创建 log4j.properties 配置文件 log4j.prope ...
- 【亲测有效】Github无法访问或者访问速度的解决方案
我相信,很多朋友都遇到了 Github 访问速度过慢的问题,我也是在此记下笔记,方便以后拿来使用. 第一步.修改Hosts 通过问题的搜索了解到 github 访问很慢一般通过修改 hosts 文件解 ...
- QQ使用的使用评价
1:界面以及功能:打开软件之后探出登录窗口,基本功能的登录,找回密码,注册帐号等功能均在比较醒目的位置,界面较为友好. 将注册帐号放在打开软件的第一界面当然是正确的选择,给予用户非常直观的提示(没有帐 ...
- 同步手绘板——android端取色
作为绘图软件,颜色的选取必不可少,在刚开始取色时,所选颜色和显示颜色始终不一致,比如选取白色显示绿色,在这个问题上消耗了太多的时间,后来发现是比例问题,通过修改实现恰当的取色.
- Leetcode——66.加一
@author: ZZQ @software: PyCharm @file: leetcode66_加一.py @time: 2018/11/29 16:07 要求:给定一个由整数组成的非空数组所表示 ...
- HDOJ2010_水仙花数
一道水题.一直出现Output Limit Exceeded的原因是在while循环中没有终止条件的时候会自动判断并报错,写的时候忘记加!=EOF结束标识了. HDOJ2010_水仙花数 #inclu ...
- CentOS(6.8)7 安装 Mysql 5.7
https://blog.csdn.net/zyw_java/article/details/70949596 https://blog.csdn.net/yzl11/article/details/ ...
- 在Windows下查看Java的JRE路径
java -showversionecho %JAVA_HOME%path 这个方法可以确认当前java.exe的版本,但是并不能确定输出JRE的具体路径. JAVA_HOME的路径,也不一定就是当前 ...
- Vue.directive注册指令
指令定义函数提供了几个钩子函数(可选): vue指令的生命周期 bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作. inserted: 被绑定 ...
- Wshshell 脚本简单学习
WshShell 的简单语法 学习 同事给了一个脚本自动执行 部署命令 感觉挺好的 , 年前一直说要学习一下 但是一直没有学习(自己太懒了) 这次简单总结一下. 创建对象: Set WshShell ...