LeetCode—剑指 Offer 4、9、26、35、53

剑指 Offer 4. 二维数组中的查找、9. 用两个栈实现队列、26. 树的子结构、35. 复杂链表的复制、53 - I. 在排序数组中查找数字 I

题目描述:
[4]
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
在这里插入图片描述
[9]
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
在这里插入图片描述

[26]

在这里插入图片描述
[35]
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
在这里插入图片描述
[53]
统计一个数字在排序数组中出现的次数。
在这里插入图片描述
考察重点
[4]同leetcode240题。从0行matrix[0].length-1开始查询,小于target则行++,大于target则列–。
[9]A栈负责输出,B栈负责输入。平时所有元素存在B,输出时先将B元素取出并放入A,输出A栈顶元素,再将A元素取出并放回B。
[26]先通过递归遍历A,查询与B的根节点相等的所有节点,依次作为A的子树根节点,再使用递归遍历判断这些子树与B是否完全相等。
[35]本题需要深拷贝,所以一次遍历先使用Map记录新旧节点的对应关系,再一次遍历填补random指针。
[53]两次二分查找,分别锁定重复数字的左右边界点。
[4]代码

    public boolean findNumberIn2DArray(int[][] matrix, int target) {if (matrix.length == 0) return false;int n = matrix.length, m = matrix[0].length;int row = 0, column = m - 1;while (row < n && column >= 0) {int num = matrix[row][column];if (num == target) {return true;} else if (num > target) {column--;} else {row++;}}return false;}

[9]代码

class CQueue {private LinkedList<Integer> A;private LinkedList<Integer> B;public CQueue() {A = new LinkedList<Integer>();B = new LinkedList<Integer>();}public void appendTail(int value) {B.addLast(value);}public int deleteHead() {if(B.isEmpty()){return -1;}while(!B.isEmpty()){A.addLast(B.removeLast());}int res = A.removeLast();while(!A.isEmpty()){B.addLast(A.removeLast());}return res;}
}/*** Your CQueue object will be instantiated and called as such:* CQueue obj = new CQueue();* obj.appendTail(value);* int param_2 = obj.deleteHead();*/

[26]代码

func recursion(A *TreeNode, B *TreeNode)bool {if (A == nil && B == nil) || (A != nil && B == nil){return true}if A == nil && B != nil{return false}left := recursion(A.Left, B.Left) right := recursion(A.Right, B.Right)if A.Val == B.Val && left && right{return true}return false
}func recursionA(A *TreeNode, B *TreeNode, mark *bool) {if A == nil || *mark == true{return }recursionA(A.Left, B, mark) temp := Bif A.Val == B.Val && *mark != true{		//这里需要加mark是否为true的判断,防止再次进入判断导致mark被置为false*mark = recursion(A, B)}B = temprecursionA(A.Right, B, mark)
}
func isSubStructure(A *TreeNode, B *TreeNode) bool {if B == nil{return false}mark := falserecursionA(A, B, &mark)return mark
}

[35]代码

public Node copyRandomList(Node head) {Map<Node, Node> map = new HashMap<>();	//map记录旧链表与新链表节点的对应关系Node newHead = new Node(0);Node recHead = head;Node temp = newHead;while(head != null){		//先将所有元素除random外的属性,都填入Node newNode = new Node(head.val);temp.next = newNode;map.put(head, newNode);temp = newNode; head = head.next;}head = recHead;temp = newHead.next;while(head != null){	//通过head找到random指向的旧节点,再用map找到与该旧节点对应的新节点temp.random = map.get(head.random);head = head.next;temp = temp.next;}return newHead.next;}

[53]代码

public int search(int[] nums, int target) {if(nums.length == 0)		//特殊情况排除return 0;else if(nums.length == 1 && target == nums[0]){return 1;}else if(nums.length == 1 && target != nums[0]){return 0;}int lBoarder = 0, rBoarder = 0;int left = 0, right = nums.length - 1;while(left <= right){		//寻找左端点,遇到目标值后,不结束查找,而是right=mid-1继续查找左端点,直到left>right则可以认为目前right指向target子串的前一位。int mid = left + (right-left)/2;if(nums[mid] < target){left = mid + 1;}else if(nums[mid] >= target){right = mid - 1;lBoarder = right+1;}}left = 0;right = nums.length - 1;while(left <= right){	//寻找右端点int mid = left + (right-left)/2;if(nums[mid] > target){right = mid - 1;}else if(nums[mid] <= target){left = mid + 1;rBoarder = left-1;}}if(nums[lBoarder] == target &&  nums[rBoarder] == target)	//目标值也可能不存在于数组中,对其加以判断return rBoarder - lBoarder + 1;else return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 安装 JDK 问题

2019独角兽企业重金招聘Python工程师标准>>> 1. 下载并解压缩 2. mv到/usr/lib/jdk 3. 在~/.bashrc文件末尾添加环境变量 export JAVA_HOME/usr/lib/jdkexport CLASSPATH${JAVA_HOME}/libexport PATH${JAVA_HOME}/bin:$PATH 4. 重启终端&#xff0c;输入javac -vers…

Asp.net中水晶报表的使用

在我们对VS.Net中的水晶报表&#xff08;Crystal Reports&#xff09;进行研究之前&#xff0c;我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心。一周以后&#xff0c;在阅读了大量的“HOWTO”文档之后&#xff0c;我们成功地将一些简单的报告加入到了我们…

2011-8-31 身体欠佳

1. 前几日明显感到身体欠佳&#xff0c;熬夜很难受&#xff0c;以往搞到1点问题不大的&#xff0c; 老了啊。 经过几天作息时间的调整&#xff0c;回家不开电脑&#xff0c;23点之前上床&#xff0c;在加上食疗&#xff0c;今天缓过来了。 看来有必要把生活节奏放慢一点&#x…

Scala学习(一)--Scala基础学习

Scala基础学习 摘要&#xff1a; 在篇主要内容&#xff1a;如何把Scala当做工业级的便携计算器使用&#xff0c;如何用Scala处理数字以及其他算术操作。在这个过程中&#xff0c;我们将介绍一系列重要的Scala概念和惯用法。同时你还将学到作为初学者如何浏览Scaladoc文档 1. 使…

Test live writer

拷贝屏幕来的图片 转载于:https://www.cnblogs.com/huobazi/archive/2006/11/19/565070.html

LeetCode—剑指 Offer 10 - I、II 斐波那契数列、青蛙跳台阶问题 63. 股票的最大利润

剑指 Offer 10 - I、II 斐波那契数列、青蛙跳台阶问题 63. 股票的最大利润 题目描述&#xff1a; [I] 斐波那契数列由 0 和 1 开始&#xff0c;之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为…

Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门

一.HDFS出现的背景 随着社会的进步&#xff0c;需要处理数据量越来越多&#xff0c;在一个操作系统管辖的范围存不下了&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是却不方便管理和维护—>因此&#xff0c;迫切需要一种系统来管理多台机器上的文件&a…

LeetCode—<动态规划专项>剑指 Offer 42、46、47、48

剑指 Offer 42. 连续子数组的最大和、剑指 Offer 46. 把数字翻译成字符串、剑指 Offer 47. 礼物的最大价值、剑指 Offer 48. 最长不含重复字符的子字符串 题目描述&#xff1a; [42] [46] [47] [48] 考察重点&#xff1a;第42题要计算最大子数组和&#xff0c;考虑第i位…

操作系统核心原理-5.内存管理(下):段式内存管理

一、分页系统的缺点 分页系统存在的一个无法容忍&#xff0c;同时也是分页系统无法解决的一个缺点就是&#xff1a;一个进程只能占有一个虚拟地址空间。在此种限制下&#xff0c;一个程序的大小至多只能和虚拟空间一样大&#xff0c;其所有内容都必须从这个共同的虚拟空间内分配…

LeetCode—<双指针专项>剑指 Offer 18、21、22、25、52、57、58 - I

剑指 Offer 18. 删除链表的节点、21. 调整数组顺序使奇数位于偶数前面、22. 链表中倒数第k个节点、25. 合并两个排序的链表、52. 两个链表的第一个公共节点、57. 和为s的两个数字、58 - I. 翻转单词顺序 题目描述&#xff1a; [18] 给定单向链表的头指针和一个要删除的节点的值…

Android应用程序绑定服务(bindService)的过程源代码分析

Android应用程序组件Service与Activity一样&#xff0c;既可以在新的进程中启动&#xff0c;也可以在应用程序进程内部启动&#xff1b;前面我们已经分析了在新的进程中启动Service的过程&#xff0c;本文将要介绍在应用程序内部绑定Service的过程&#xff0c;这是一种在应用程…

Bootstrap系列 -- 8. 代码显示

一. Bootstrap中的代码块 代码块一般在博客中使用的较多&#xff0c;比较博客园中提供的贴代码. 在Bootstrap中提供了三种形式的代码显示 1. 使用<code></code>来显示单行内联代码 2. 使用<pre></pre>来显示多行块代码 3. 使用<kbd></kbd>…

PowerDesigner12对SQL2005反向工程问题.

用PowerDesigner12利用ODBC连接SQL2005进行反向工程&#xff0c;总分报错[Microsoft][ODBC SQL Server Driver][SQL Server]未能准备评语句SQLSTATE37000解决办法&#xff1a;把&#xff02;更改默认的数据库为&#xff02;这个选项去掉在中选择要进行操做的数据库.转载于:http…

LeetCode—<搜索与回溯专项>剑指 Offer 12、13、34、36、54

剑指 Offer 12. 矩阵中的路径、13. 机器人的运动范围、34. 二叉树中和为某一值的路径、36. 二叉搜索树与双向链表、54. 二叉搜索树的第k大节点 题目描述&#xff1a; [12] 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回…

导数--基本概念

转载于:https://www.cnblogs.com/liuys635/p/11242741.html

[导入]创建、查询、修改带名称空间的 XML 文件的例子

XML的应用越来越广泛了&#xff0c;如Vista、Flex编程都将使用 XML&#xff0c;正确掌握XML的各种操作&#xff0c;对提高编程效率至关重要。下面就是一个综合处理带名称空间的XML的例子。 文章来源:http://blog.csdn.net/net_lover/archive/2006/12/18/1447434.aspx 转载于:ht…

自己动手编写一个ajax extender

该扩展的功能有以下几点&#xff1a;1、当鼠标移到某个按钮上时&#xff0c;该按钮显示一个Css样式&#xff1b;2、当鼠标移开该按钮时&#xff0c;该按钮显示另外一个Css样式&#xff1b;3、当鼠标点击该按钮时&#xff0c;执行一个用户自己定义的javascript函数&#xff1b; …

LeetCode—<搜索与回溯专项>剑指 Offer 55 - I、55 - II、64、68 - I、68 - II

剑指 Offer 55 - I. 二叉树的深度、55 - II. 平衡二叉树、64. 求12…n、68 - I. 二叉搜索树的最近公共祖先、68 - II. 二叉树的最近公共祖先 题目描述&#xff1a; [55 - I] [55 - II] [64] 求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关…

Tip:使用Extender的ResolveControlID事件

1、分析 不知道大家在使用ASP.NET AJAX Control Toolkit里的各个Extender控件时&#xff0c;有没有接触过ResolveControlID事件&#xff1f;这个事件在官方也只用了很少的笔墨来描述。的确&#xff0c;这个事件不太常用&#xff0c;看看ASP.NET AJAX的演示站点&#xff0c;根本…

《算法导论》——MergeSort

前言&#xff1a; 在今后的日子里&#xff0c;我将持续更新博客&#xff0c;讨论《算法导论》一书中的提到的各算法的C实现。初来乍到&#xff0c;请多指教。 今日主题&#xff1a;   今天讨论《算法导论》第二章算法基础中的归并排序算法。下面是该算法的代码Merge.h&#x…