![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指算法题笔记
_running4J
在外人眼中:程序员不过是在敲打键盘;但在程序员心中:程序员敲出的每个字符,都是程序的一部分。
展开
-
剑指offer_JZ11_二进制中1的个数
剑指offer_JZ11_二进制中1的个数 题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 示例1 输入: 10 返回值: 2 思路 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保原创 2021-03-20 12:36:25 · 227 阅读 · 0 评论 -
剑指offer_JZ30_连续子数组的最大和
剑指offer_JZ30_连续子数组的最大和 题目描述 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n). 示例1 输入: [1,-2,3,10,-4,7,2,-5] 返回值: 18 说明: 输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。 思路 动态规划问题。dp[n]代表以当前元素为截止点的连续子序列的最大和,如果dp[原创 2021-03-20 11:37:27 · 139 阅读 · 0 评论 -
剑指offer_JZ34_第一个只出现一次的字符
剑指offer_JZ34_第一个只出现一次的字符 问题描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数) 示例1 输入 “google” 返回值 4 思路1(借助HashMap) 因为他的字符串长度是有限的,而且我们需要找到只出现一次的字符,我们可以首先考虑用Hashmap这样的数据结构来把所有出现过的字符和他们对应的出现次数记录下来。接着,因为我们需要找到第一原创 2021-03-08 21:34:13 · 81 阅读 · 0 评论 -
剑指offer_JZ38_二叉树的深度
剑指offer_JZ38_二叉树的深度 题目: 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 示例1: 输入: {1,2,3,4,5,#,6,#,#,7} 返回值: 4 思路1(借助队列): 借助队列按照二叉树层次顺序存取,首先把根节点加入队列,queue.add(root); 之后使用循环(当队列size()不为0时),先取出队头元素(第一次队头为根节点),判断该节点是否有左右孩子,若有则入队。每一层不停入队出队,值原创 2021-03-07 11:30:00 · 86 阅读 · 0 评论 -
剑指offer_JZ6_旋转数组的最小数字
剑指offer_JZ6_旋转数组的最小数字思路1:思路2: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 示例: 输入:[3,4,5,1,2] 返回值:1 思路1: 1.数组为空,返回0 2.部分旋转,如:【1,2,3,4,6,8,9】 部分旋转后:【4,6,8,9,1,2,3】 3.整体旋转,如:【1,2,3,4,6,8,9】 import java原创 2021-03-03 10:49:42 · 90 阅读 · 0 评论