随笔分类 -  算法基础

1 2 下一页
异或运算
摘要:1)0 ^ N = N 2) N ^ N = 0 3) 同样一批数,有交换律和结合律,异或得到的结果一定是同一个。 交换律:a ^ b = b ^ a 结合律:(a ^ b) ^ c = a ^ (b ^ c) 其实都是来自于异或运算就是无进位相加这一个概念。 题目一: 一个数组中有一种数出现了奇数 阅读全文
posted @ 2026-05-23 15:29 有点懒惰的大青年 阅读(11) 评论(0) 推荐(0)
合并K个升序列表
摘要:题目:给你多条链表,举个例子,如下三条链表: 1->2->6->7 2->4->4->5 3->7->7->9 你给我合成一个大链表,每一条链表都有序,请你合成一个总的有序的链表,结果应该是: 1->2->2->3->4->4->5->6->7->7->7->9 并返回第1个节点。 图1: 图2: 阅读全文
posted @ 2026-03-19 22:30 有点懒惰的大青年 阅读(17) 评论(0) 推荐(0)
比较器
摘要:一、自定义比较器实现任意一个javaBean之间的比较 package com.cy.class06; import java.util.ArrayList; import java.util.Arrays; public class ShowComparator { public static v 阅读全文
posted @ 2026-03-19 21:18 有点懒惰的大青年 阅读(10) 评论(0) 推荐(0)
《程序员数学:素数》—— 你真的了解 RSA 加密算法吗?
摘要:《程序员数学:素数》—— 你真的了解 RSA 加密算法吗? 这篇文章感觉写的蛮好的,转载过来。 阅读全文
posted @ 2025-06-20 15:38 有点懒惰的大青年 阅读(11) 评论(0) 推荐(0)
用位运算实现加减乘除(3)
摘要:用位运算实现加减乘除(2) 中的div方法要求a和b都能转成正数,但是: 系统最小值没法转成绝对值:Integer.MIN_VALUE 所有整数中只有这个数,是转不出绝对值的。 int a = Integer.MIN_VALUE; System.out.println(-a); 所以分4钟情况讨论: 阅读全文
posted @ 2025-05-11 14:35 有点懒惰的大青年 阅读(48) 评论(0) 推荐(0)
用位运算实现加减乘除(2)
摘要:位运算实现除法 先说一种普遍的除法,比如下图中的a / b: b向左移到最接近a的时候,但是又没a大,要保证左移到最接近a但是不比a大。 除的最终结果里,这个位置一定有1,见下图: 然后把a减掉这个数,变成: 然后再把b移动到最接近a的时候,这个位置一定是1: 这就是最终的结果: a/b的过程就是上 阅读全文
posted @ 2025-05-04 20:01 有点懒惰的大青年 阅读(172) 评论(0) 推荐(0)
用位运算实现加减乘除(1)
摘要:用位运算实现+-*/ 1.加法 2.减法 3.乘法 4.除法 其实计算机处理加减乘除,都是使用位运算的。在计算机的底层全是位运算帮你实现的。计算机不认识什么加减乘除,计算机底层只认逻辑门,只认识与或左移右移之类的,底层都是01信号。但是手写的位运算还是不如java自带的快,因为java虚拟机里面有一 阅读全文
posted @ 2025-05-04 16:43 有点懒惰的大青年 阅读(96) 评论(0) 推荐(0)
位图
摘要:位图 1.位图的功能 2.位图的好处 3.位图的实现 例如有个集合,可以装数,3,5,-1,这个集合有add方法,有contains方法判断元素在不在,常见的有hashSet。但是这个有个问题是浪费空间的问题,比如你3进来,3这个数int类型,空间起码占4字节,4 byte,其实远远不止4字节,因为 阅读全文
posted @ 2025-05-03 16:29 有点懒惰的大青年 阅读(55) 评论(0) 推荐(0)
两个有序链表的合并
摘要:两个有序链表的合并 给定两个有序链表的头节点head1和head2, 返回合并之后的大链表,要求依然有序 例子:1 -> 3 -> 3 -> 5 -> 7 2 -> 2 -> 3 -> 3 -> 7 返回:1 -> 2 -> 2 -> 3 -> 3 -> 3 -> 3 -> 5 -> 7 -> 7 阅读全文
posted @ 2025-05-02 16:14 有点懒惰的大青年 阅读(94) 评论(0) 推荐(0)
两个链表相加
摘要:两个链表相加 给定两个链表的头节点head1和head2, 认为从左到右是某个数字从低位到高位,返回相加之后的链表 例子:4->3->6 2->5->3 返回:6->8->9 解释:634 + 352 = 986 4->3->6 的意思是这代表一个数,个位数是4,十位数是3,百位数是6,所以代表63 阅读全文
posted @ 2025-05-02 15:13 有点懒惰的大青年 阅读(62) 评论(0) 推荐(0)
K个节点的组内逆序调整
摘要:给定一个单链表的头节点head,和一个正数k 实现k个节点的小组内部逆序,如果最后一组不够k个就不调整。 例子: 调整前:1->2->3->4->5->6->7->8, k=3 调整后:3->2->1->6->5->4->7->8 代码实现: 1 package com.cy.class04; 2 阅读全文
posted @ 2025-05-01 17:14 有点懒惰的大青年 阅读(46) 评论(0) 推荐(0)
用双链表实现双端队列
摘要:双端队列:这个结构允许你从头部加,头部出,允许你从尾部加,或者尾部出。所以是4个操作。而且每一个操作都是O(1) 单链表支持头部的加减。 单链表也支持尾部的加,但是不支持尾部的减。因为tail无法找到它的之前的节点。可以通过遍历到前节点,但是不能遍历,因为要求时间复杂度是O(1),所以单链表不支持双 阅读全文
posted @ 2025-05-01 11:34 有点懒惰的大青年 阅读(54) 评论(0) 推荐(0)
用单链表实现队列和栈
摘要:需求: 用单链表结构实现队列结构 用单链表结构实现栈结构 队列:先进先出 栈:像弹夹一样,先压进去的后出。后压进去的先出。 队列的offer方法演示草图: poll弹出,如果链表一个数也没有了,head为null,此时应该将tail也置为null。如下图所示,如果tail不置为null的话,5就是脏 阅读全文
posted @ 2025-05-01 10:53 有点懒惰的大青年 阅读(56) 评论(0) 推荐(0)
介绍单链表和双链表
摘要:一、单链表和双链表的定义 单链表:值,一条next指针 双链表:值,一条last指针,一条next指针 玩出无尽的花样! 二、单双链表的反转 经典题目: 给定一个单链表的头head,完成链表的逆序调整。 给定一个双链表的头head,完成链表的逆序调整。 单链表的反转 单向链表示意图: 给定头节点he 阅读全文
posted @ 2025-04-12 14:32 有点懒惰的大青年 阅读(91) 评论(0) 推荐(0)
哈希表和有序表的使用
摘要:一、哈希表和有序表 哈希表的使用 有序表的使用 package com.cy.class03; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; 阅读全文
posted @ 2025-04-12 11:34 有点懒惰的大青年 阅读(35) 评论(0) 推荐(0)
时间复杂度
摘要:一、时间复杂度 分析一下选择、冒泡、插入排序的时间复杂度 时间复杂度:它是用来描述我到底发生了几次常数操作的指标。什么是常数操作?如果某一个操作它跟数据量没有关系,它就是固定时间的,我们管这样的操作叫常数操作。比如1+1和1000000+1000000,1是int,100万也是int的话,这两个过程 阅读全文
posted @ 2025-04-10 22:27 有点懒惰的大青年 阅读(101) 评论(0) 推荐(0)
二分法
摘要:有序数组中找到num 有序数组中找到>=num最左的位置 有序数组中找到<=num最右的位置 局部最小值问题 有序数组中找到num: 当然你可以遍历,但是那就没意思了,你没有利用到有序这个条件。 二分法查找,代码如下: 查看代码 package com.cy.class03; import com. 阅读全文
posted @ 2025-04-06 14:53 有点懒惰的大青年 阅读(25) 评论(0) 推荐(0)
对数器的使用
摘要:你已经写好的你的排序算法等,但是不知道对不对,实在想不出反例了,怎么做? 如果大样本随机测试都通过了,那就基本没有问题,如果发现打印出错误了,可以备份原始排序的数组,还可以改maxLen生成数组的大小,再返回去检查代码哪里写的不对,就很好调试了。 还可以随意控制样本的大小。后面还会讲写个暴力方法来验 阅读全文
posted @ 2025-04-05 14:29 有点懒惰的大青年 阅读(21) 评论(0) 推荐(0)
数据结构
摘要:一、数据结构 1.连续结构,数组,拿出数组某个下标的值很快,一整块区域都是它。 2.跳转结构,不是连续的,内存中分配一小块区域给a,a上面记录着值,还有一小块是记录指向下一个节点的内存地址。 二叉树,a这个节点一小块内存,记录着值,还有两块内存记录着地址,可以想象为左指针和右指针,分别指向两个内存区 阅读全文
posted @ 2025-04-02 23:16 有点懒惰的大青年 阅读(52) 评论(0) 推荐(0)
简单排序
摘要:1.选择排序、冒泡排序、插入排序: package com.cy.code; import java.util.Arrays; /** * 选择排序、冒泡排序、插入排序 */ public class Code07_SelectionSort { public static void swap(in 阅读全文
posted @ 2025-04-02 22:30 有点懒惰的大青年 阅读(36) 评论(0) 推荐(0)

1 2 下一页