大公司面试经典数据结构与算法题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:什么是同步逻辑和异步逻辑?(汉王) 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系. 答案应该与上面问题一致 [补充]:同步时序逻辑电路的特点:各触发器的时钟端全部连接 ...
随机推荐
- 自己动手写把”锁”---LockSupport深入浅出
本篇是<自己动手写把"锁">系列技术铺垫的最后一个知识点.本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒. LockSupport是Java6引入 ...
- CSS 外边距
CSS 外边距围绕在元素边框的空白区域是外边距.设置外边距会在元素外创建额外的“空白”. 设置外边距的最简单的方法就是使用 margin 属性,这个属性接受任何长度单位.百分数值甚至负值. ##### ...
- nginx域名访问的白名单配置梳理
在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果:1)针对nginx域名配置所启用的端口(比如80端口)在iptable ...
- 理解使用static import 机制
J2SE 1.5里引入了“Static Import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员.本文介绍这一机制的使用方法,以及使用过程中的注意事项. 在Java程序中,是 ...
- EnglishGame
https://github.com/zhangxue520/EnglishGame/blob/master/EnglishGame <程序设计实践I> 题目: 打字训练测试软 ...
- 第三个Sprint ------第三天
出题界面代码 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- SpringBoot-简单实例
在进行实例之前,首先须确保电脑环境变量已经配置好,包括jdk.maven.此文章不做描述,不清楚自行百度. 第一步:来到springboot官网(https://start.spring.io/)下载 ...
- PAT 1014 福尔摩斯的约会
https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560 大侦探福尔摩斯接到一张奇怪的字条:“我们约会 ...
- 面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)
里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出.其严格表述如下:如果对每一个类型为S的 ...
- Javascript中的闭包和C#中的闭包
js和C#中都有闭包的概念,闭包本质上是一个对象,是指有权访问另一个局部作用域中的变量的对象(或函数,在C#中是委托).这个对象和函数/方法有关: 在js中,闭包是由于函数引用了局部变量形成的.在C# ...