Java与算法(6)

40道JAVA经典算法面试题(答案) 所有的面试题目都不是一成不变的,特别是像一线大厂,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。大致内容包括了Java集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈!希望对于大家有所帮助。a的值,其中a是一个数字。... 阅读详情

Java与算法(6)

题目:
将单链表按某值划分为左边小,中间相等,右边大的形式。
如:
9-0-4-5-1,按3来划分
结果就是1-0-4-9-5
对部分内部节点顺序不做要求
public class DivideLink {
	public static class Node {
		int data;
		Node next;
		public Node(int data) {
			this.data = data;
		}
	}
	
	public Node divide(Node head,int p) {
		int i=0;
		Node node = head;
		while (node!=null) {
			i++;
			node=node.next;
		}
		Node[] nodes = new Node[i];
		node=head;
		for(int j=0;j<nodes.length;j++) {
			nodes[j] = node;
			node=node.next;
		}
		sort(nodes, p);
		for(int j=1;j<nodes.length;j++) {
			nodes[j-1].next = nodes[j];
		}
		nodes[i-1].next = null;
		return nodes[0];
		
		
		
	}
	public void printLink(Node head) {
		while (head!=null) {
			System.out.println(head.data+" ");
			head=head.next;
		}
		System.out.println();
	}
	
	public void sort(Node[] nodes,int p)  {
		int index = 0;
		int big = nodes.length;
		int small = -1;
		while (index!=big) {
			if (nodes[index].data<p) {
				swap(nodes, ++small, index++);
			}	else if (nodes[index].data == p) {
				index++;
			} else {
				swap(nodes, --big, index);
			}
			
		}
		
		
	}
	
	
	
	
	public void swap(Node[] nodes ,int a,int b) {
		Node tNode = nodes[a];
		nodes[a] = nodes[b];
		nodes[b] = tNode;
	}
	
	
	
	

	public static void main(String[] args) {
		Node node1 = new Node(9);
		node1.next = new Node(0);
		node1.next.next = new Node(4);
		node1.next.next.next = new Node(5);
		node1.next.next.next.next = new Node(1);
		DivideLink divideLink = new DivideLink();
		Node node = divideLink.divide(node1, 3);
		divideLink.printLink(node);
		
	}

}
题目:
两个链表相加生成新链表
如:
9-3-7和6-3
生成1-0-0-0
public class AddLink {
	
	public static class Node {
		int data;
		Node next;
		public Node(int data) {
			this.data = data;
		}
	}
	
	public void printLink(Node head) {
		while (head!=null) {
			System.out.println(head.data+" ");
			head=head.next;
		}
		System.out.println();
	}
	
	public Node add(Node node1,Node node2) {
		Stack<Integer> s1 = new Stack<>();
		Stack<Integer> s2 = new Stack<>();
		while (node1!=null) {
			s1.push(node1.data);
			node1=node1.next;
		}
		while (node2!=null) {
			s2.push(node2.data);
			node2=node2.next;
		}
		
		int ca = 0;
		int n1  = 0;
		int n2 = 0;
		Node node = null;
		Node pre = null;
		int n=0;
		while (!s1.isEmpty() || !s2.isEmpty()) {
			n1 = s1.isEmpty()?0:s1.pop();
			n2 = s2.isEmpty()?0:s2.pop();
			n=n1+n2+ca;
			pre = node;
			node = new Node(n%10);
			node.next = pre;
			ca = n/10;
		}
		if (ca == 1) {
			pre = node;
			node = new Node(1);
			node.next=pre;
		}
		return node;
		
	}
	
	
	public static void main(String[] args) {
		Node node1 = new Node(1);
		node1.next = new Node(3);
		node1.next.next = new Node(7);
		Node node2 = new Node(2);
		node2.next = new Node(3);
		AddLink dAddLink  = new AddLink();
		Node node = dAddLink.add(node1, node2);
		dAddLink.printLink(node);
	}

}
题目:
将单链表的每k个节点逆序
如:
1-2-3-4-5-6-7-8,k=3
结果:
3-2-1-6-5-4-7-8
public class ReverseKNode {
	
	
	public static class Node {
		int data;
		Node next;
		public Node(int data) {
			this.data = data;
		}
	}
	
	public void printLink(Node head) {
		while (head!=null) {
			System.out.println(head.data+" ");
			head=head.next;
		}
		System.out.println();
	}
	
	public Node reverse(Node head,int k) {
		Node cur = head;
		Node newhead = head;
		Node pre = null;
		Node next = null;
		Stack<Node> stack = new Stack<>();
		while (cur!=null) {
			next = cur.next;
			stack.push(cur);
			if (stack.size()==k) {
				pre = resignl(stack, pre, next);
				newhead = newhead == head?cur:newhead;
			}
			cur = next;
			
		}
		return newhead;
		
		
	}
	
	public Node resignl(Stack<Node> stack,Node left,Node right) {
		Node cur = stack.pop();
		if (left!=null) {
			left.next = cur;
		}
		Node next = null;
		while (!stack.isEmpty()) {
			next = stack.pop();
			cur.next = next;
			cur = next;
		}
		cur.next = right;
		return cur;
	}
	
	public static void main(String[] args) {
		Node node1 = new Node(1);
		node1.next = new Node(3);
		node1.next.next = new Node(5);
		node1.next.next.next = new Node(7);
		node1.next.next.next.next = new Node(9);
		node1.next.next.next.next.next = new Node(11);
		node1.next.next.next.next.next.next = new Node(13);
		node1.next.next.next.next.next.next.next = new Node(15);
		ReverseKNode kNode = new ReverseKNode();
		kNode.printLink(node1);
		Node node = kNode.reverse(node1, 3);
		System.out.println("------");
		kNode.printLink(node);
	}

}
基于Python3.6实现Java版murmurhash算法 Python3.6 实现java1.8 murmurhash 加密算法前因后果以下是初稿代码,验证无误(至少我的实例中没有出现偏差) 前因后果 由于最近工作涉及到python操作Java项目的缓存问题,而Jedis中默认使用的murmurhash算法与python版本的不互通,后来尝试使用Jpype调用Java代码实现加密,但是迫于强迫症以及减少进程消耗资源,强迫自己调试了一天终于实现python3.6版本的murmurhash并且与Java1.8版本的Jedis中默认的加密算法互通。 以下是初稿代码,验证 阅读详情

相关推荐

95% 的算法都是基于这 6 种算法思想,大厂Java面试必考点

算法思想是解决问题的核心,万丈高楼起于平地,在算法中也是如此,95% 的算法都是基于这 6 种算法思想,结下了介绍一下这 6 种算法思想,帮助你理解及解决各种算法问题。 1 递归算法 1.1 算法策略 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。 优缺点: 优点:实现简单易上手 缺点:递归算法对常用的算法如普通循环等,运行效率较低;并且在递归调用的

程序员干货站 691

java经典算法题

1.Java多线程:写一下两个线程交替打印 0~100 的奇偶数 这种实现方式的原理就是线程1打印之后唤醒其他线程,然后让出锁,自己进入休眠状态。因为进入了休眠状态就不会与其他线程抢锁,此时只有线程2在获取锁,所以线程2必然会拿到锁。线程2以同样的逻辑执行,唤醒线程1并让出自己持有的锁,自己进入休眠状态。这样来来回回,持续执行直到任务完成。就达到了两个线程交替获取锁的效果了。 private int count = 0; private final Object lock = new Object()

ZHANGLIZENG的博客 8778

Java利用递归算法统计1-6的数组排列组合数

Java利用递归算法统计1-6的数组排列组合数 1、设计源码 /** * @Title:ArrayCombination.java * @Package:com.you.data * @Description:数组组合 * @Author: 游海东 * @date: 2014年3月16日 下午10:37:37 * @Version V1.2.3 */ package co

游海东的技术专栏 4526

java算法编程题(60题)

题目1、兔子问题2、求素数3、水仙花数4、分解质因数5、成绩问题6、最大公约数和最小公倍数7、统计字符个数8、a+aa+aaa+…9、完数10、自由落体11、无重复数12、利润问题13、完全平方数14、判断这这一天是这一年的第几天15、升序输出16、九九乘法表17、猴子问题一18、猴子问题二19、输出棱形20、数列的前n项和问题21、阶乘相加22、递归求阶乘23、岁数问题24、逆序输出25、判断回...

似水流年风萧兮 1万+

JAVA经典算法90题【含源码】-史上最全

JAVA经典算法90题【含源码】-史上最全

java经典算法练习题

java经典算法练习题 适合初学者 内含有大量代码 包含答案 保你学完有很大的长进!

30个最常见算法题及其Java解答

算法是计算机科学的核心,掌握常见算法问题对Java开发者至关重要。本文精选30个高频算法题,附Java实现和详细解析,助你提升编程和面试能力。

一起探索IT的世界 3721

JAVA基础编程练习题50题及经典算法90题【含源码及答案】-史上最全

JAVA基础编程练习题50题及经典算法90题【含源码及答案】-史上最全

Java常用算法练习,(含八大排序算法)

1.利用递归算法求解数组各元素的和;2.利用快慢指针实现数组元素去重3.实现数组扩容并插入新元素。

xintaitehao的博客 337

JAVA算法编程题全集(50题及答案)

Java算法编程题,一共50道,答案完整,可以检测Java的掌握情况

JAVA算法编程题汇总(50题及答案)

JAVA算法编程题全集(50题及答案)

python3.6 java_基于Python3.6实现Java版murmurhash算法

Python3.6 实现java1.8 murmurhash 加密算法前因后果由于最近工作涉及到python操作Java项目的缓存问题,而Jedis中默认使用的murmurhash算法与python版本的不互通,后来尝试使用Jpype调用Java代码实现加密,但是迫于强迫症以及减少进程消耗资源,强迫自己调试了一天终于实现python3.6版本的murmurhash并且与Java1.8版本的Jedi...

weixin_36469726的博客 328

利用Ghidra与SVD插件实现STM32固件深度逆向分析

本文详细介绍了如何利用Ghidra逆向工程框架结合SVD插件,实现对STM32固件(.bin文件)的深度逆向分析。通过加载描述芯片外设寄存器的SVD文件,Ghidra能将晦涩的硬件地址操作转换为可读的寄存器符号,极大提升了对嵌入式固件中通信协议、安全校验等关键逻辑的分析效率。文章涵盖了从Java环境搭建、工具配置到实战逆向解析的完整流程。

peach的博客 942

java6本身支持的MD2和MD5的消息摘要算法

大家可以对同一个串进行多次的摘要计算,查看多次摘要算法的值是否相同。 目前java6本身只是支持MD2和MD5的消息摘要实现 应用:这种摘要算法主要用来校验文件是否被获取的准确性。大家到apache的官方下载的文件的时候通常配备一些消息摘要算法进行验证 如下是实现的代码: p...

chuifuhuo6864的博客 132

如何用ggplot2绘制专业级双侧柱状图展示GO富集结果(附完整代码)

本文详细介绍了如何使用R语言的ggplot2包绘制专业级双侧柱状图展示GO富集结果,包括数据预处理、基础图形构建、高级样式定制和出版级细节调整。通过完整的代码示例和实用技巧,帮助生物信息学研究人员高效可视化高通量数据,提升学术图表的质量和可读性。

weixin_30342209的博客 75

SigmaStudio进阶技巧:如何用ADAU1701实现60段EQ与防啸叫算法

本文深入探讨了如何在ADAU1701 DSP芯片上实现专业级音频处理系统。通过精密的资源规划与架构设计,详细讲解了构建高达60段参数均衡器(EQ)的有效方法,并集成了移频与自适应陷波双策略的智能防啸叫算法。内容涵盖从SigmaStudio工程优化、算法模块组合到系统联调实战的全流程,旨在帮助中高级开发者充分利用ADAU1701性能,打造稳定、高效的音频处理解决方案。

weixin_28256233的博客 384

java md2_java6本身支持的MD2和MD5的消息摘要算法

大家可以对同一个串进行多次的摘要计算,查看多次摘要算法的值是否相同。目前java6本身只是支持MD2和MD5的消息摘要实现应用:这种摘要算法主要用来校验文件是否被获取的准确性。大家到apache的官方下载的文件的时候通常配备一些消息摘要算法进行验证如下是实现的代码:packagecom.ca.test;importjava.security.MessageDigest;/***jdk6本身支...

weixin_31509753的博客 207

手把手教你配置UEFI Secure Boot:从密钥生成到系统验证(附避坑指南)

本文详细介绍了如何配置UEFI Secure Boot,从密钥生成到系统验证的全过程,包括PK、KEK等关键密钥的生成方法,以及常见问题的解决方案。通过实战案例和避坑指南,帮助用户有效提升系统启动安全性,防止恶意软件植入。

weixin_30776273的博客 340

6大基本排序算法 【Java实现】

【代码】6大基本排序算法 【Java实现】

qq_63132580的博客 160

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1919

车载以太网网络测试-24【SOME/IP概述】

SOME/IP**(Scalable Service-Oriented Middleware over IP)是一种基于IP网络的面向服务的通信协议,专为汽车电子系统设计,支持服务发现、远程过程调用(RPC)和事件通知等功能。核心标准是由 AUTOSAR(汽车开放系统架构)定义,现已成为车载通信的重要标准之一(如AUTOSAR 4.0+)。SOME/IP的全称是,它是一种基于IP网络的面向服务的通信协议,广泛应用于汽车电子(AUTOSAR)和物联网领域。Scalable(可扩展的)含义。

车载网络测试工程师的博客 2186

Grok Bot 与 Notion 集成:从社交关注列表到结构化知识库的自动化整理指南

在信息碎片化的时代,社交平台关注列表、收藏夹和阅读清单往往散落各处,难以高效管理。Grok Bot 作为一种具备深度自然语言理解能力的对话式人工智能工具,可以将非结构化文本自动转化为分类清晰、字段规整的表格数据;而 Notion 作为支持开放 API 的结构化知识库,则能稳定存储并灵活展示这些信息。两者结合,相当于构建了一条“原始文本 → AI 理解整理 → 结构化数据 → 知识库”的高效数据流管道。无论是手机端快速手动导入,还是通过 Python 脚本调用 Grok API 与 Notion API 实现

weixin_34224941的博客 378

PIMPL 模式 以及Q_DECLARE_PUBLIC 与 Q_DECLARE_PRIVATE

在 C++ 中,PIMPL 模式通常通过将类的私有数据和实现放在一个单独的类中,然后在类的公共接口中使用指向该私有实现类的指针来实现。宏可以帮助在 Qt 的 PIMPL 模式中实现类的私有实现和公共接口的分离,提高代码的封装性和可维护性。宏的结合使用,我们可以实现类的私有性和封装,避免暴露私有实现的细节,同时提高类的可维护性和灵活性。:这一行声明了一个友元类,使得类的公共接口可以访问私有实现类的私有成员。:这一行声明了一个友元类,使得类的私有实现可以访问类的私有成员。是两个宏,用于实现 PIMPL 模式。

追赶时代的博客 840
上一篇: Java与算法(5)
下一篇: Netty心跳检测
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值