![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode题解
小陈大人
没有对象那就new一个
展开
-
109. Convert Sorted List to Binary Search Tree
原题题目描述: 把一个升序链表构建成左右子树深度相差不过1的平衡树思路:构建树一般而言用递归生成 先定义两个快慢指针,一路往前走,当快指针到达尾结点或者尾结点的前驱结点时循环结束.创建树节点,结点数据域为此时慢指针指向的结点的元素值,并由此递归其构建左子树,而其左子树的数据域均取自头结点到慢指针这段(原链表的前半段)其右子树的数据域均取自慢结点后继结点到空结点这段(原链表的后半段)...原创 2018-08-21 19:47:42 · 227 阅读 · 0 评论 -
66. Plus One
原题题目描述: 给定表示非负整数的非空数字数组,加上整数的1。存储数字使得最高有效数字位于列表的开头,并且数组中的每个元素包含单个数字。您可以假设整数不包含任何前导零,除了数字0本身思路:从后往前遍历数组,只要元素不为9,那该位置元素加1,然后返回该数组即可,但若元素是9,那把该位置的元素置0,还有种极端情况,当原数组所有的元素都是9时,则要新建一个数组,长度比原数组大1,第一个位置为1,...原创 2018-08-16 12:57:31 · 408 阅读 · 0 评论 -
35. Search Insert Position
原题题目描述:给定排序数组和目标值,如果找到目标,则返回索引。如果没有,请返回索引按顺序插入的索引。您可以假设数组中没有重复项。思路:二分查找class Solution { public int searchInsert(int[] nums, int target) { int n=nums.length; int right=n; ...原创 2018-08-16 12:15:13 · 236 阅读 · 0 评论 -
747. Largest Number At Least Twice of Others
原题题目描述: 要你判断具有唯一最大值的数组中最大值是否至少为其他元素的2倍大,是则返回其下标,不是返回-1思路:可以一次遍历找出数组中的最大值和次大值,判断最大值是否大于次大值的两倍即可class Solution { public int dominantIndex(int[] nums) { int max1=-1; int max2...原创 2018-08-16 11:40:51 · 176 阅读 · 0 评论 -
53. Maximum Subarray
原题题目描述:定一个整数数组nums,找到具有最大总和并返回其总和的连续子数组(包含至少一个数字)。思路:这个典型的动态规划题(dp) 定义两个变量,一个变量用来记录下标移到当前位置时的最大和,而这个做法就是当前元素的值加前一个位置的最大和,若这个最大和<0,则当前元素+0(止损),若前一个位置的最大和>0,则当前位置元素值与之相加,结果就为现在位置的最大和另一个变量则时刻...原创 2018-08-16 11:02:51 · 112 阅读 · 0 评论 -
283. Move Zeroes
原题 - 题目描述:给定一个数组,把数组中所有的0都放在最后,其他不为0的数保持原有顺序 - 思路:遍历数组,并定义一个从0开始的下标变量,若不为0,则进行覆盖,最后一路填0,直到长度一致void moveZeroes(int* nums, int numsSize) { int index=0; for(int i=0;i&lt;numsSize;i++){ ...原创 2018-08-14 02:16:12 · 119 阅读 · 0 评论 -
695. Max Area of Island
原题题目描述:在一个矩阵中找到最大的一片由1构成的区域,这个区域是指四个方向上的1都至少能和一个1邻接,最后返回最大区域中1的个数思路:用dfs进行上下左右依次遍历即可java代码class Solution { public int maxAreaOfIsland(int[][] grid) { int res=0; for(int i=0...原创 2018-08-14 01:52:50 · 95 阅读 · 0 评论 -
485. Max Consecutive Ones
原题题目描述:在一个二进制数组中,找到1连续出现的最大个数代码int findMaxConsecutiveOnes(int* nums, int numsSize) { int res=0; int count=0; for(int i=0;i<numsSize;i++){ if(nums[i]==1){ co...原创 2018-08-14 00:14:31 · 114 阅读 · 0 评论 -
566. Reshape the Matrix
原题题目描述:把说给矩阵按照给定的行和列构造出新矩阵,并要求两者暗行遍历的序列一致代码class Solution { public int[][] matrixReshape(int[][] nums, int r, int c) { int m=nums.length; int n=nums[0].length; if(r*...原创 2018-08-13 23:41:50 · 89 阅读 · 0 评论 -
725. Split Linked List in Parts
原题题目描述:给你一个链表,安给定的要求分成几段,每段之间长度不相差1,且前面的链表的长度大于等于后面的链表长思路: 先遍历求出链表长再用长度和份数求商得到每段的基本长,求余得到剩下的长度,剩下的长度则遍历时自减分配给前面的链表,当分配完后,后面的链表长度就为基本长用一个指针从头遍历整个链表不停歇,另一个指针根据算出的链表长,在链表中走相对应的长度的步数,走完一个置next域为空....原创 2018-08-18 20:13:51 · 150 阅读 · 0 评论 -
237. Delete Node in a Linked List
原题题目描述:编写一个函数来删除单链表中的节点(尾部除外),只允许访问该节点。思路:由于只给了要删结点,没法获取其前驱结点,所以我们采用的策略是复制后继结点的数据域值到当前结点,然后删除后继结点即可/** * Definition for singly-linked list. * struct ListNode { * int val; * struct...原创 2018-08-16 16:52:05 · 112 阅读 · 0 评论 -
206. Reverse Linked List
原题题目描述:反转链表(没有头结点)思路:总共需要三个指针变量,一个指针指向当前结点,一个指向其前驱结点,一个指向后继结点,遍历链表,把当前结点的指针域指向前驱结点,然后三个指针向后走,遍历结束后,返回指向前驱结点的指针即可/** * Definition for singly-linked list. * public class ListNode { * int v...原创 2018-08-16 17:56:14 · 279 阅读 · 0 评论 -
24. Swap Nodes in Pairs
原题题目描述: 给定链表,交换每两个相邻节点并返回其头部。思路: 自己构造一个头结点,定义一个cur指针,指向头结点.定义两个指针first和second遍历链表,first指向cur.next,second指向cur.next.nextfirst.next指向second用cur指针串联起链表,即cur.next指向second,second.next指向firstcur指向f...原创 2018-08-21 11:29:51 · 776 阅读 · 0 评论 -
160. Intersection of Two Linked Lists
原题题目描述:判断两个链表是否有公共结点,有则返回相交结点,否则返回null思路:我们可以设两个指针,各自指向a,b链表,两者不相等时循环,当a,b指向null时,则让它们指向另一条链表的头结点,这样当链表相交时,两指针总会在第二次遍历时在相交结点相遇,若不想交,则会在第二次遍历时同时指向null/** * Definition for singly-linked list....原创 2018-08-17 20:20:04 · 119 阅读 · 0 评论 -
234. Palindrome Linked List
原题题目描述:判断一个单链表是否为回文链表思路:先用用快慢指针,找到链表的中间位置,若链表有奇数个元素则找到中间位置的后一位,然后反转后一部分链表,反转完毕后前后两部分进行遍历比较,若数据域全相同,则是回文链表,反之则反 bool isPalindrome(struct ListNode* head) { struct ListNode* fast=head; ...原创 2018-08-17 15:45:55 · 105 阅读 · 0 评论 -
203. Remove Linked List Elements
原题题目描述:删除链表中所有数据域等于给定值的结点思路: 可以用递归,若当前结点元素等于给定值则返回下一个结点,否则返回当前结点还可以自己构造头结点,进行迭代删除递归法/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *ne...原创 2018-08-17 13:32:31 · 141 阅读 · 0 评论 -
141. Linked List Cycle
原题题目描述:判断一个链表是否有循环思路: 定义快慢指针,慢指针走一步,快指针走两步,若两者能相遇,则有循环或者用java里的哈希表,把每个节点的引用存入表中,若访问节点在表中存在则有循环,若因为指针指向空而退出,自然安不存在循环/** * Definition for singly-linked list. * struct ListNode { * int va...原创 2018-08-17 08:56:23 · 225 阅读 · 0 评论 -
328. Odd Even Linked List
原题题目描述:把一个链表奇数节点先放一起,然后再把偶数节点穿起来思路:定义两个指针,各自走两步,改变相应的指针域即可,特别注意循环条件/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int...原创 2018-08-19 15:25:54 · 180 阅读 · 0 评论 -
445. Add Two Numbers II
原题题目描述: 给你两个链表,把他们的元素值各自当成一个整数,然后相加得到的值返回一个链表(注:每个节点位置只放一个数字)思路: 把两个链表压入栈中若栈不为空,从两个栈中取值,和节点值的三者和,与10的商作为结果链表的值,与10取余,得到的值作为下一个值的进位/** * Definition for singly-linked list. * public class L...原创 2018-08-19 09:20:30 · 179 阅读 · 0 评论 -
83. Remove Duplicates from Sorted List
原题题目描述:有序链表中删除重复元素思路:相邻元素若相等,则让指针域指向下下个结点,不相等才让指针继续遍历链表/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* ...原创 2018-08-16 19:56:00 · 114 阅读 · 0 评论 -
21. Merge Two Sorted Lists
原题题目描述: 把两个递增有序链表,融合成一个递增有序链表思路:常规的思路就不说了,这里介绍用递归实现,代码优雅,啧啧/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNo...原创 2018-08-16 18:35:49 · 123 阅读 · 0 评论 -
817. Linked List Components
原题题目描述:给出 head了包含唯一整数值的链表的头节点 .我们还给出了列表G,链表中的值的子集。返回连接组件的数量,G如果它们在链表中连续出现,则连接两个值。思路 我们可以先建立一个哈希表,存放G数组,然后遍历链表,当当前结点在表中出现,且它的下一个结点值不在表中出现或下一个结点为空时,让计数器自增,其他情况就让遍历指针往后走哈希表的具体实现可以用Set集合,也可以用一个bool...原创 2018-08-18 15:26:32 · 181 阅读 · 0 评论 -
707. Design Linked List
原题题目描述: 设计链表思路:可以自己创建链表,也可以用arryList模拟用arrayList模拟class MyLinkedList { List<Integer> list; /** Initialize your data structure here. */ public MyLinkedList() { list ...原创 2018-08-18 14:09:15 · 299 阅读 · 0 评论 -
118. Pascal's Triangle
原题题目描述:构造如下三角形 思路:遍历行和列,每一层新建一个ArrayList,在行列号及列为0的地方向list里面填1,其他位置的值是其上一行同列及上一行往左偏一列的两个值之和,这两个值要从另一个l结果集合中取得,每一行的Arraylist构建完成后,丢进最终的结果集合中,最后返回class Solution { public List<List<Int...原创 2018-08-16 00:42:40 · 98 阅读 · 0 评论 -
832. Flipping an Image
位运算class Solution { public int[][] flipAndInvertImage(int[][] A) { int n=A.length; for(int []arr : A){ for(int i=0;2*i<n;i++){ if(arr[i]==arr[n-1...原创 2018-08-12 08:41:09 · 182 阅读 · 0 评论 -
771. Jewels and Stones(2018.8.12-1)
题目大意:给定两个字符串J和S,要求输出S中包含J中所含字母的个数,严格区分大小写.思路:考察标记数组的使用. 先定义一个标记数组,初始化全为0,然后遍历J的字符,并把它当标记数组下标,字母会自动转为acsii值,被标记的位置数组值为1,其他为0,标记工作完成后,遍历S字符,并把它当标记数组下标,筛选出数组为1的位置,计数器自增,最后返回计数器的值代码int numJewelsInSt...原创 2018-08-12 00:38:32 · 153 阅读 · 0 评论 -
661. Image Smoother
原题题目描述:给你一个二维数组,每个元素的值要你按照以他为中心的8个值外加自己的值求平均值,并填在元素位置上,其中有些位置没有8个邻居,那么就找出尽可能多的邻居算平局值(包括自身),按照这个方法最终返回新矩阵思路: 先写一个判断数组下标是否越界的函数然后,遍历数组时,每个位置i,j,按照i和j分别上下左右共8个方向偏移,对每次偏移判断是否越界,由此可找出有效邻居的个数,总和,最终得到平...原创 2018-08-15 02:38:46 · 203 阅读 · 0 评论 -
697. Degree of an Array
原题题目描述:给定非空整数非负整数nums,该数组的度数被定义为其任何一个元素的最大频率。你的任务是找到一个(连续的)子阵列的最小可能长度nums,其具有相同的度数nums。思路定义两个map集合,一个用来记录数组各元素的首次出现的下标,另一个map用来记录每个元素出现的频率时刻更新degree,找到最大的度数,并同步更新最小长度minlen当degree与另一个元素的频率相同时选...原创 2018-08-15 01:09:52 · 92 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
原题题目描述:在有序数组中返回数组值相加为目标值的两个下标思路:一左一右的值相加和目标值大小作比较,然后根据结果,缩小左右位置,直到相等class Solution { public int[] twoSum(int[] numbers, int target) { int l=0; int r=numbers.length-1; ...原创 2018-08-14 23:19:28 · 98 阅读 · 0 评论 -
217. Contains Duplicate
原题题目描述:判断一个数组的元素是否有重复项思路:用个set集合,遍历数组时,set集合中不存在的数则加入,若set中存在则返回falseclass Solution { public boolean containsDuplicate(int[] nums) { final Set<Integer> distinct = new HashS...原创 2018-08-14 22:47:11 · 131 阅读 · 0 评论 -
122. Best Time to Buy and Sell Stock II
原题题目描述:假设您有一个数组,其中第i 个元素是第i天给定股票的价格。设计算法以找到最大利润。您可以根据需要完成尽可能多的交易(即,多次买入并卖出一股股票)。注意:您不能同时进行多笔交易(即,您必须在再次购买之前卖出股票)。思路:只需要累加相邻两天,明天比今天高出的价格即可(即只要明天比今天的价格高,就相减累加到利润中)int maxProfit(int* prices, in...原创 2018-08-14 21:41:56 · 81 阅读 · 0 评论 -
717. 1-bit and 2-bit Characters
原题题目描述:有两个特殊字符,第一个字符可以用一位表示0。第二个字符可以用两位(10或11)表示。现在给出一个由几位表示的字符串。返回最后一个字符是否必须是一位字符。给定的字符串将始终以零结尾思路:从左到右遍历,遇到0下标增1,遇到2下标增2,然后判断最后下标若为n-1则返回truebool isOneBitCharacter(int* bits, int bitsSize) {...原创 2018-08-14 20:50:30 · 147 阅读 · 0 评论 -
169. Majority Element
原题题目描述:找出一个数组中出现超过n/2次的元素(一定有)两种技巧: 一种是把数组排好序,中位数即为所求擂台打架法,具体看代码方法一class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2...原创 2018-08-14 13:08:13 · 89 阅读 · 0 评论 -
830. Positions of Large Groups
原题题目描述:给你一个字符串,输出连续出现3次及以上的字符的首尾下标(注:是连续出现的位置)思路定义首尾指针,初始化都指向0下标尾指针遍历整个字符串,当首尾字符相同时,则尾指针向前走,当走到首尾字符不同时,计算首尾相隔距离当距离>=3,则把这组首尾下标添加到结果集中更新首指针到尾指针的位置重复以上步骤,直到尾指针遍历完整个字符串class Solution {pub...原创 2018-08-15 08:39:49 · 149 阅读 · 0 评论 -
561. Array Partition I
原题链接题目意思:给定一个长度为2n的数组,分成n组(a1, b1), (a2, b2), …, (an, bn) ,求min(a1, b1)+min(a2, b2)+ …,min(an, bn)的最大值算法证明(出处) 假设每一对i,bi &gt;= ai。 Sm = min(a1, b1) + min(a2, b2) + … + min(an, bn)。鉴于1,Sm =...原创 2018-08-13 00:24:57 · 86 阅读 · 0 评论 -
27. Remove Element
原题题目描述:在数组中删除给定的元素,并返回新的数组长度思路:看代码class Solution { public int removeElement(int[] nums, int val) { int begin=0; for(int i=0;i<nums.length;i++){ if(nums[i]!=...原创 2018-08-15 23:32:57 · 86 阅读 · 0 评论 -
674. Longest Continuous Increasing Subsequence
原题题目描述:返回数组中最大连续递增序列的元素个数思路:定义一个计数器,当数组中后一个元素比前一个元素大,计数器自增长,同时定义一个最大长度变量,和计数器每次取较大的那个,当然若不是递增,则把计数器重置为1class Solution { public int findLengthOfLCIS(int[] nums) { if(nums.length==0...原创 2018-08-15 23:19:32 · 127 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
原题题目描述:给一个股票价格数组,要你得到最大利益(最小价格买进之后,最大价格出售)思路:定义两个变量,一个累加记录相邻价格可赚利益差价,当差价<0时则置0,另一个变量存放当前最大差价class Solution { public int maxProfit(int[] prices) { int maxAll=0; int maxN...原创 2018-08-15 22:17:32 · 109 阅读 · 0 评论 -
746. Min Cost Climbing Stairs
原题题目描述:在楼梯上,每i步,cost[i]分配了一些非负成本(0索引)。一旦您支付了费用,您可以爬一到两步。您需要找到最低成本才能到达最高层,您可以从索引为0的步骤开始,也可以从索引为1,求上楼顶的最小费用思路: 要到达当前位置,最小费用就是将当前位置费用与前两个位置的最小费用之和,最后楼顶前两个楼梯费用的最小值便是答案class Solution { public ...原创 2018-08-15 21:20:23 · 116 阅读 · 0 评论 -
628. Maximum Product of Three Numbers
原题题目描述:在一个有正有负的数组中,返回3个数的最大乘积思路:一次遍历找出最大的3个数和最小的两个数class Solution { public int maximumProduct(int[] nums) { int max1,max2,max3,min1,min2; max1=max2=max3=Integer.MIN_VALUE;...原创 2018-08-15 17:54:25 · 117 阅读 · 0 评论