【刷题笔记/剑指Offer】Part 1 (1-10)

从Roblox玩家到开发者:Lua脚本、Roblox Studio与游戏创作实战指南 游戏开发是数字内容创作的核心领域之一,其本质是通过编程语言和开发引擎将创意转化为可交互的虚拟体验。在众多开发平台中,Roblox以其独特的UGC生态和低门槛特性脱颖而出,为初学者提供了从玩家转变为创造者的路径。其技术核心在于理解客户端-服务器架构、掌握Lua脚本语言以及熟练运用Roblox Studio开发环境。这些技术不仅支撑着虚拟世界的构建,更在游戏性能优化、网络通信安全等方面具有重要工程价值。本文以Roblox开发为切入点,通过实战案例解析Lua脚本编写、对象模型管理、事件驱动编程等关键概念,并深入探 阅读详情

剑指Offer,在牛客网上可以在线刷题,感觉比看书本要来的更爽一些,现在开始刷起来!

1. 二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class Solution {
    public boolean Find(int [][] array,int target) {
		int i, j;
        for(i = 0; i < array.length; i++) {
            for(j = 0; j < array[0].length; j++){
                if(array[i][j] == target)
                    return true;
            }
        }
        return false;
    }
}
这无疑是最简单的方法,但是可以通过按行或者按列进行预判断范围来省去一部分操作。继续想,矩阵是按着从左向右递增,从上到下递增的方式进行排序,利用这点,从左下角开始搜索的话,那么就可以按着元素大于目标就上移,元素小于目标就右移的方式快速寻找目标:
public class Solution {
    public boolean Find(int [][] array,int target) {
		int row = array.length - 1;
        int list = 0;
        while(row >= 0 && list < array[0].length){
            if(array[row][list] == target)
                return true;
            else if(array[row][list] > target)
                row--;
            else
                list++;
        }
        return false;
    }
}

2. 从尾到头打印链表

输入一个链表,从尾到头打印链表每个节点的值。

这是一道经典的题目,有两种思路:

1. 利用栈结构,Stack

2. 利用递归

相对来说,利用库中的已有结构通常可以简化问题,以后要多注意。下面附上代码:

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        Stack<Integer> stack = new Stack<Integer>();
        while (listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
 
        ArrayList<Integer> list = new ArrayList<Integer>();
        while (!stack.isEmpty()) {
            list.add(stack.pop());
        }
        return list;       
    }
}
今天和实验室的一个同学聊了一下这个题目,目前她会用三种方法来搞定这个问题,不包括用栈,下面说一下她的方法:
1. 从前往后遍历原链表的同时,新建一个链表,从后往前建立新链表:
public static ListNode reverse1(ListNode node){
		if (node != null) {
			ListNode tmp = new ListNode(node.val);
			while(node.next != null){
				node = node.next;
				ListNode previous = new ListNode(node.val);
				previous.next = tmp;
				tmp = previous;
			}
			return tmp;
		}
		return node;
	}



2. 从前往后遍历原链表的同时,改变原来链表节点指针的指向:
参考:http://www.cnblogs.com/xing901022/p/3760080.html

3.

3. 替换空格

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

利用java中的已有指令可以很容易达到要求,关键在于命令的选择,怎么过又快又节省空间呢,下面是代码,运行时间<1ms,占用0k:

public class Solution {
    public String replaceSpace(StringBuffer str) {
     if(str==null)
     {
        return null;
     }
     for(int i=0;i<str.length();i++)
     {
         if(str.charAt(i)==' ')
         {
            str.replace(i,i+1,"%20");
         }
      }
      return str.toString();  
    }
}

4. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。


要牢记的几点:
1. 前序遍历的第一个元素就是根节点。
2. 中序遍历就是所有数从小到大排列,另外,左子树都在根节点的左边,右子树都在根节点的右边,所以根据这点定位根节点来分离左右子树,递归地重建二叉树。
附上代码:
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public  TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if(pre.length == 0 || in.length == 0)
            return null;
        TreeNode root = new TreeNode(pre[0]);
        root = reConstructBinaryTree(pre, 0, pre.length - 1, in, 0, in.length - 1);
		return root;
    }
    public  TreeNode reConstructBinaryTree(int[] pre, int pres, int pree, int[] in, int ins, int ine){
        if(pres > pree || ins > ine)
        	return null;
        TreeNode root = new TreeNode(pre[pres]);
        int index = locate(in, root.val);
        int d = index - ins;
        root.left = reConstructBinaryTree(pre, pres + 1, pres + d, in, ins, index - 1);
        root.right = reConstructBinaryTree(pre, pres + d + 1, pree, in, index + 1, ine);
        return root;
    }
	public  int locate(int[] in, int target) {
		int index = 0;
		while(in[index] != target)
			index++;
		return index;
	}
}
看了牛客网上大神的代码,受启发,用哈希表会更简单,利用hashmap中的get可以轻易索引根节点的位置:
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
     
     
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
               if(pre==null||in==null){
            return null;
        }
 
        java.util.HashMap<Integer,Integer> map= new java.util.HashMap<Integer, Integer>();
        for(int i=0;i<in.length;i++){
            map.put(in[i],i);
        }
        return preIn(pre,0,pre.length-1,in,0,in.length-1,map);
    }
     
      public TreeNode preIn(int[] p,int pi,int pj,int[] n,int ni,int nj,java.util.HashMap<Integer,Integer> map){
 
        if(pi>pj){
            return null;
        }
        TreeNode head=new TreeNode(p[pi]);
        int index=map.get(p[pi]);
        head.left=preIn(p,pi+1,pi+index-ni,n,ni,index-1,map);
        head.right=preIn(p,pi+index-ni+1,pj,n,index+1,nj,map);
        return head;
    }     
}
顺便查了一下广度优先和深度优先遍历的方法,核心思想是通过利用队列结构存储来实现广度优先遍历,通过利用栈结构来实现深度优先遍历。
广度优先遍历:
压入root-》【弹出-》压入左节点-》压入右节点】    【·】内循环直到队列为空
 public void levelOrderTraversal(){
        if(root==null){
            System.out.println("empty tree");
            return;
        }
        ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>();
        queue.add(root);
        while(queue.isEmpty()==false){
            TreeNode node=queue.remove();
            System.out.print(node.value+"    ");
            if(node.left!=null){
                queue.add(node.left);
            }
            if(node.right!=null){
                queue.add(node.right);
            }
        }
        System.out.print("\n");
    }

深度优先遍历:
压入root-》【弹出-》压入右节点-》压入左节点】    【·】内循环直到栈为空
    public void depthOrderTraversal(){
        if(root==null){
            System.out.println("empty tree");
            return;
        }       
        ArrayDeque<TreeNode> stack=new ArrayDeque<TreeNode>();
        stack.push(root);       
        while(stack.isEmpty()==false){
            TreeNode node=stack.pop();
            System.out.print(node.value+"    ");
            if(node.right!=null){
                stack.push(node.right);
            }
            if(node.left!=null){
                stack.push(node.left);
            }           
        }
        System.out.print("\n");
    }

5. 用两个栈实现队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。


看到这道题自然而然的想法是用另一个栈作为辅助栈,进行主要栈的倒序辅助作用,于是乎代码如下:
import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
    	while(!stack1.isEmpty()) {
            stack2.push(stack1.pop());
        }
        int top = stack2.pop();
        while(!stack2.isEmpty()) {
            stack1.push(stack2.pop());
        }
        return top;
    }
}
今天牛客网服务器好像出了点儿问题,没法看到其他大神的解答,等看看有没有更好的答案我再贴上来。服务器终于好了,看了一下,这个应该就是最佳解答了。终于对了一次。。。哭

6. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

注意到题目中说的是非递减序列,所以从这里入手,考虑用二分法进行查找,但是注意二分法对于递增有效,所以还要考虑重复元素存在的情况,具体的算法解释请看:http://blog.youkuaiyun.com/jsqfengbao/article/details/47108069 。程序如下:

public class Solution {
    public static int minNumberInRotateArray(int [] array) {
        if(array.length == 0)
            return 0;
    	if(array.length == 1)
            return array[0];
        int left = 0, mid = left, right = array.length - 1;
        while(array[left] >= array[right]){
            if(right - left <= 1){
                mid = right;
                break;
            }
            mid = (left + right) / 2;
            if(array[left] == array[right] && array[left] == array[mid])
                return regular(array, left, right);
            if(array[left] <= array[mid])
                left = mid;
            else
                right = mid;
        }
        return array[mid];
    }
    public static int regular(int[] array, int left, int right){
        int min = array[left];
        for(int i = left + 1; i <= right; i++){
            if(min > array[i])
                min = array[i];
        }
        return min;
    }
}

7. 斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
这个题目之前就接触过,最直观的肯定是要用递归啦,几行代码搞定,但是发现栈溢出大哭,痛定思痛,决定用表达式计算,代码如下:
public class Solution {
    public int Fibonacci(int n) {
        if(n == 0)
            return 0;
        if(n == 1)
            return 1;
        int numfn1 = 0, numfn2 = 1;
        int currentnum = 0;
        for(int i=2; i<=n; ++i) {
            currentnum = numfn1+numfn2;
            numfn1 = numfn2;
            numfn2 = currentnum;
        }
        return currentnum;
    }
}

8. 跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
刚看到这题目的时候,我理解错了题意,以为是要求1和2的组合正好凑成target的种数,没有考虑到顺序问题。考虑顺序问题就纠结了好一阵子,最后写出前几项,找出规律,其实就是斐波那契数列的样式,这给我的提示是遇到递归问题的时候要先写出前几项,找规律。

9. 变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

这个题目延续了前一道题目的风格,找规律,递归的题目一般都和找规律有关,找到规律,程序就很好编写了:

public class Solution {
    public int JumpFloorII(int target) {
        int sum = 1;
        for(int i = 1; i < target; i++)
            sum*=2;
        return sum;
    }
}

后面附上找规律的思路:http://www.nowcoder.com/profile/286927/codeBookDetail?submissionId=1522855

10. 矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

依旧找规律,发现和 题目8 一样的规律,so:

public class Solution {
    public int RectCover(int target) {
		if(target < 0)
            return -1;
        else if(target == 1 || target == 0)
            return 1;
        else if(target == 2)
            return 2;
        else{
            int sum = 0;
            int fn1 = 1;
            int fn2 = 2;
            for(int i = 3; i <= target; i++){
                sum = fn1 + fn2;
                fn1 = fn2;
                fn2 = sum;
            }
            return sum;
        }
    }
}


UE5实战:如何用Georeference插件搞定百度地图坐标转换(附完整代码) 本文详细解析了在UE5中使用Georeference插件实现百度地图坐标转换的全流程,包括BD-09到UE内部坐标的转换算法、UTM投影配置及性能优化技巧。通过完整代码示例和实战案例,帮助开发者高效解决数字孪生项目中的地理坐标转换难题。 阅读详情

相关推荐

Ubutntu下使用realsense d435i(二):获取某二维像素点的三维坐标

00 准备工作 准备工作包括安装驱动以及pyrealsense2,具体可参考上一篇: Ubutntu下使用realsense d435i(一):准备工作以及安装pyrealsense2 https://blog.csdn.net/gyxx1998/article/details/121461293 01 通过二维像素点获得物体三维坐标 这个在上一篇已经介绍了代码: realsense d435i获取某像素点三维坐标(计算深度和点云两种方法) https://blog.csdn.net/gyxx1998/

gyxx1998的博客 9945

《剑指offer》读后感

帮研二的学姐准备网易暑期实习的机试时,代码提交在一个OJ网站叫牛客网。出于好奇就多点了一下这个网站,看到《剑指offer》的在线编程专栏,就是把剑指offer中的题目都挂在了网上,可以在线判断是否AC。以前也总是听到学长们推荐该书,索性趁着项目不是太赶的时候把该书一口气读完了,顺便把其中的代码一并AC。总的来说,对于代码的菜鸟,看完一遍还是能提高很多的,如果仅仅将该书定位于面试前的突击书还是有些暴殄

Irving_zhang的专栏 9509

告别U盘!在Ubuntu 22.04上从零搭建PXE网络装机服务器(支持UEFI/Legacy双启动)

本文详细介绍了在Ubuntu 22.04上搭建PXE网络装机服务器的完整流程,支持UEFI/Legacy双启动模式。通过配置DHCP、TFTP和HTTP服务,实现无需U盘的高效批量系统部署,解决传统安装方式的介质依赖、版本控制和时间成本问题,显著提升机房维护和设备部署效率。

weixin_42569329的博客 249

对于一代经典《剑指offer》的书评

转自豆瓣:https://book.douban.com/review/5568789/#comments 看了豆瓣上的一些评论,自己也想写一下,首先说说对于读书的一些想法,然后说一下这本书。 首先,我想说,对于一本书来说,必定有好有不好的地方,即使是经典流传之作,也未必能符合所有人的胃口,我们看书,就是要从书中学到自己欠缺的东西,提升自己,而不是去找作者什么的毛病,那样只能说你是一个

mdjxy63的博客 821

手把手教你用Github提交CVE漏洞(附完整截图流程)

本文提供了在GitHub平台提交CVE漏洞的完整实战指南。从前期准备、目标搜寻与漏洞验证,到撰写规范的GitHub Issue进行披露,最后通过官方渠道完成CVE提交,手把手教你如何将安全研究成果转化为获得国际认可的CVE编号。

weixin_28309571的博客 330

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

【剑指offer】替换空格

Java算法面试必看宝典《剑指offer》题目思路分析及实现代码。

Wanna的博客 391

ZYNQ新手必看:你的PS端DDR和QSPI配置真的对了吗?从原理到实操的避雷指南

本文深入解析ZYNQ PS端外设配置的关键要点,特别是DDR匹配和QSPI时钟优化的实战技巧。通过详细案例和配置清单,帮助开发者避免常见错误,确保系统稳定性和启动可靠性。适合ZYNQ新手和需要优化最小系统的开发者参考。

weixin_28675839的博客 447

《剑指Offer》笔记&题解&思路&技巧&优化_Part_7

🟢1. LCR 179. 查找总价格为目标值的两个商品 🟢2. LCR 180. 文件组合 🟢3. LCR 181. 字符串中的单词反转 🟢4. LCR 182. 动态口令 🔴5. LCR 183. 望远镜中最高的海拔 🟡6. LCR 185. 统计结果概率 🟢7. LCR 186. 文物朝代判断 🟢8. LCR 187. 破冰游戏 🟢8. LCR 187. 破冰游戏 🟡9. LCR 188. 买卖芯片的最佳时机 🟡10. LCR 189. 设计机械累加

这里有一只小马吖 1671

LEC/FORMAL --- PARTIII debug

lec(logic equivalence checking)又叫formal check,是对ic design的综合,PR前后的设计进行逻辑对比检查的工具/手段,保证综合不改变rtl原始的logic function。目前用的较多的就是C家的formal工具。接下来介绍一下lec过程中遇到的问题以及debug手段。...

sinat_27691203的博客 7714

C++详解 二叉树的三种遍历方式

上一篇文章,讲了二叉树的创建——C++实现 链表存储二叉树 接下来讲解二叉树的三种遍历方式:先序(前序)遍历、中序遍历、后序遍历,三种方式都是DFS(Depth First Search)深度优先搜索,核心思想都是函数的递归(栈),如果你能理解上面这篇文章中创建二叉树的具体过程,那么遍历就轻而易举 1.先序遍历 Former_Order_Traversel(BinTree_Node* p) { ...

weixin_43335392的博客 5371

《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_4

1. LCR 148. 验证图书取出顺序——栈的压入、弹出序列 2. LCR 149. 彩灯装饰记录 I——从上到下打印二叉树 3. LCR 150. 彩灯装饰记录 II 4. LCR 151. 彩灯装饰记录 III 5. LCR 152. 验证二叉搜索树的后序遍历序列 6. LCR 153. 二叉树中和为目标值的路径 7. LCR 154. 复杂链表的复制 8. LCR 155. 将二叉搜索树转 9. LCR 156. 序列化与反序列化二叉树 10. LCR 157. 套餐内商品的排列顺序

这里有一只小马吖 1609

颠覆性创新的测量框架与跨领域实证分析

颠覆性创新作为科技发展的重要驱动力,其核心在于实现知识体系的范式转换。从技术原理看,这类创新通常具备知识替代、网络重构和跨领域渗透三大特征,通过引用网络分析和文本挖掘等方法可量化评估其影响力。在工程实践中,CD指数、DI指数等测量工具帮助研究者识别具有突破潜力的成果,而深度学习等新兴技术进一步提升了评估精度。当前AI、半导体等领域的热门技术发展表明,模块化架构和产业协同能有效促进颠覆性创新。面对全球范围内创新颠覆性下降的趋势,优化科研评价体系、构建跨学科协作网络成为关键应对策略。

weixin_29735807的博客 323

《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_3

1. LCR 138. 有效数字——表示数值的字符串 2. LCR 139. 训练计划 I——调整数组顺序使奇数位于偶数前面 3. LCR 140. 训练计划 II——链表中倒数第k个节点 4. LCR 141. 训练计划 III——反转链表 5. LCR 142. 训练计划 IV——合并两个排序的链表 6. LCR 143. 子结构判断——树的子结构 7. LCR 144. 翻转二叉树 8. LCR 145. 判断对称二叉树 9. LCR 146. 螺旋遍历二维数组 10. LCR 147. 最小栈

这里有一只小马吖 1359

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《剑指Offer》笔记&题解&思路&技巧&优化_Part_6

🟡1.LCR 168. 丑数 🟢2. LCR 169. 招式拆解 II 🔴3. LCR 170. 交易逆序对的总数 🟢4. LCR 171. 训练计划 V 🟢5. LCR 172. 统计目标成绩的出现次数 🟢6. LCR 173. 点名 🟢7. LCR 174. 寻找二叉搜索树中的目标节点 🟢8. LCR 175. 计算二叉树的深度 🟢9. LCR 176. 判断是否为平衡二叉树 🟡10. LCR 177. 撞色搭配 🟡11. LCR 178. 训练计划 VI

这里有一只小马吖 1158

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_5

🟢1. LCR 158. 库存管理 II 🟢2. LCR 159. 库存管理 III 🔴3. LCR 160. 数据流中的中位数 🟢4. LCR 161. 连续天数的最高销售额 🔴5. LCR 162. 数字 1 的个数 🟡6. LCR 163. 找到第 k 位数字 🟡7. LCR 164. 破解闯关密码 🟡8. LCR 165. 解密数字 🟡9. LCR 166. 珠宝的最高价值 🟡10. LCR 167. 招式拆解 I

这里有一只小马吖 1923

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_1

1. LCR 120. 寻找文件副本——数组中重复元素 2. LCR 121. 寻找目标值 - 二维数组——二维数组中查找 3. LCR 122. 路径加密——替换空格 4. LCR 123. 图书整理 I——从尾到头打印链表 5. LCR 124. 推理二叉树——重建二叉树 6. LCR 125. 图书整理 II——用两个栈实现队列 7. LCR 126. 斐波那契数——斐波那契数列 8. LCR 127. 跳跃训练——青蛙跳台阶问题 9. LCR 128. 库存管理 I——旋转数组的最小值

这里有一只小马吖 2421

【刷题笔记/剑指Offer】Part 3 (21-30)

21. 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 好吧,这个题目之前见过,但是这次遇到还是想不出来。。总之,思路是构建一个栈模仿题目操作,另外需

不会飞的超人先生的博客 764

《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_2

1. LCR 129. 字母迷宫——矩阵中的路径 2. LCR 130. 衣橱整理——机器人的运动范围 3. LCR 131. 砍竹子 I——剪绳子I 4. LCR 132. 砍竹子 II——剪绳子II 5. LCR 133. 位 1 的个数——二进制中1的个数 6. LCR 134. Pow(x, n)——数值的整数次方 7. LCR 135. 报数——打印从1到最大的n位数 8. LCR 136. 删除链表的节点——删除链表的节点 9. LCR 137. 模糊搜索验证——正则表达式匹配

这里有一只小马吖 1532

剑指offer PART 2

剑指offer PART 2 书点击自取 提取码: njku 标签(空格分隔): 笔记 C++知识点: 1、面向对象的特性   2、构造函数 3、析构函数 4、动态绑定 5、常用的设计模式 6、UML图 7、算法(空间、时间 复杂度) Content of Q 序号 题目 页数 1 赋值运算符函数 25 Q:下列程序为何会编译错误 class A { p...

anzhichao8487的博客 129

【刷题笔记/剑指Offer】Part 2 (11-20)

11. 二进制中1的个数 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

不会飞的超人先生的博客 588

剑指OFFER笔记_04_二维数组中的查找_JAVA实现

剑指OFFER_04_二维数组中的查找_JAVA实现题目:二维数组中的查找解题思路用例解析代码函数主体部分代码测试部分代码 题目:二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 如果我们将一个二维数组画成一个矩形,那么它将是这样的: 用例解析 代码 函数主体部分代码 测试部分代码 ...

YesPlease的博客 279

数据结构与算法学习指南:从核心概念到工程实践

数据结构与算法是计算机科学的核心基础,它研究如何高效组织和处理数据。其核心原理在于通过抽象数据类型(ADT)定义数据的逻辑结构及操作,并利用时间与空间复杂度分析评估算法效率。掌握这一领域的技术价值巨大,不仅能深化对程序性能的理解,更是优化软件系统、应对海量数据处理的关键。在应用场景上,无论是数据库索引、网络路由,还是推荐系统、编译器设计,都离不开高效数据结构和算法的支撑。本文以悉尼大学COMP2123课程为蓝本,聚焦堆排序、哈希表等经典内容,提供从理论到代码的完整学习路径,帮助学习者攻克动态数组、链表反转等

weixin_33896726的博客 529

【JAVA】堆实现

二叉堆的JAVA实现

不会飞的超人先生的博客 4410

【算法】几种常用排序算法

1. 冒泡排序(Bubble Sort) 冒泡排序算法需要遍历几次数组,在每次遍历中,比较 连续相邻 的元素。如果某一对元素是降序,则互换它们的位置;否则,保持不变。冒泡排序法需要遍历 n-1 次数组,每次遍历最佳情况是不用交换,则时间复杂度为 O(n) ,最差情况是每次都要交换,对于第 k 个要交换 n-1-k 次,此时时间复杂度是 O(n^2) Trick:如果在某次遍历中没有发生交换,说

不会飞的超人先生的博客 2964

【CDMI-PROJECT】DAILY SUMMURY

1. Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解 其中:@BeforeClass,@AfterClass是Junit4中新添加进去的 如果Run as —>Junit Test,运行含有@Test注释的方法是,那么所有注解方法都将被执行,所含的执行顺序是: @BeforeClass ,@Be

不会飞的超人先生的博客 2879
上一篇: 【编程之美/读书笔记】Chapter 1 游戏之乐
下一篇: 【刷题笔记/剑指Offer】Part 2 (11-20)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值