![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode——Java实现
从19.11.13开始,刷题咯
palepale
想热爱技术
展开
-
leetcode 7.整数反转 9.回文数 13.罗马数字转整数 67.二进制求和 69. x的平方根(java实现)
7. 整数反转方法一:数学·1)先不考虑反转后的溢出,通过模10不断拿到最后一位数2)考虑生成的数大于等于214748364 或小于等于-214748364 时可能发生溢出的情况,直接返回class Solution { public int reverse(int x) { int prev=0; while(x!=0){ //解决溢出 if(prev>214748364 ||(prev==2147原创 2021-03-31 14:43:32 · 127 阅读 · 0 评论 -
21.合并两个有序链表 83.删除排序链表中的重复元素 141.环形链表 160.相交链表
递归1)递归关系:从两链表的头节点开始比较元素大小,假设l1头节点元素值更小,寻找下一个较小节点 l1.next=mergeTwoLists(l1.next,l2)2)终止条件:后续节点为空/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { t.原创 2021-03-02 15:03:02 · 123 阅读 · 0 评论 -
leetcode 136.只出现一次的数字(HashMap、位运算、java)
方法1:HashMap取nums中每一个不重复元素,如果哈希表中不存在该元素值则初始键值为1,存在该元素值则使value++;后面取哈希表中的每一个value。没啥可写的。。Hashmap非线程安全、键值允许为nullclass Solution { public int singleNumber(int[] nums) { Map <Integer,Integer> map=new HashMap<>(); for(Integer num原创 2020-11-17 14:40:44 · 134 阅读 · 0 评论 -
leetcode 121.买卖股票的最佳时机 122. ||(暴力搜索时间优化、动态规划空间优化、贪心、java)
暴力搜索及时间优化暴力搜索:从左向右遍历,以每个元素开头的所有情况都要进行计算比较。maxTemp代表当下遍历序列的利润,将现有最大利润和新遍历后的数组序列表示的利润进行比较,用maxPrice记录每次遍历比较后的最大利润。当所有情况都计算比较之后,自然有了最大利润。class Solution { public int maxProfit(int[] prices) { int maxPrice =0;//记录最大利润,初始为0 int maxTemp ;原创 2020-11-16 21:44:30 · 109 阅读 · 0 评论 -
leetcode 118.杨辉三角 119.杨辉三角 ||(动态规划、List、java)
动态规划复用计算。官答。除去==0的特殊情况,其他情况都包含第一行。class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> triangle = new ArrayList<List<Integer>>(); // First base case; if user reque原创 2020-11-15 21:32:29 · 148 阅读 · 0 评论 -
leetcode 88.合并有序数组(双指针/俩游走下标、数组、java、自实现排序时不要插入)
通过空间换取时间,这样不需要在原数组nums1中插入nums2元素而导致大量数据移动造成的时间浪费。通过&&来限制i、j,保证不出现j<n但i>=m时仍有 nums1[i]<=nums2[j] 等情况而导致错误class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { //空间换时间 int nums[]=new int.原创 2020-11-15 21:08:42 · 122 阅读 · 0 评论 -
leetcode 66.加一(数组遍历、取模、java)
数组遍历、取模、java实现;虽然简单但是记录可以缓解强迫症啊原创 2020-11-14 21:51:01 · 255 阅读 · 0 评论 -
leetcode 53.最大子序和(数组、动态规划、分治法)
动态规划https://www.zhihu.com/question/39948290大规模问题可由小规模问题递推得到。即先计算小问题,存储复用结果来计算大问题。return fib(n-1) + fib(n-2)results = list(range(n+1)) # 用于缓存以往结果,以便复用(目标2)for i in range(n+1): # 按顺序从小往大算(目标3)if i < 2: results[i] = ielse:results[i] = results[i-1]原创 2020-11-14 16:07:27 · 562 阅读 · 0 评论 -
35.搜索插入的位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。方法1:很直接class Solution { public int searchInsert(int[] nums, int target) { int i=0; while(i<nums.length){ if(nums[i]>=target) break;原创 2020-10-05 18:06:04 · 136 阅读 · 1 评论 -
27.移除元素(标记量、快慢指针两种解法)
标记量思路相等时,在while中增加数组下标值,直到碰见不等数值(注意边界判断,放在&&前)。根据标记量确定覆盖位置的下标。时间复杂度:O(n)。空间复杂度:O(1)。class Solution { public int removeElement(int[] nums, int val) { int j=0; for(int i=0;i<nums.length;i++){ while(i<nums.l原创 2020-07-17 00:07:31 · 159 阅读 · 0 评论 -
26.删除排序数组中的重复项(标记量和双指针两种方法)
标记量确定覆盖的下标解题思路一层for循环,每次循环通过标记量j确定下一个不等数值要进行赋值的下标(直接覆盖待删除元素)。时间复杂度:O(n)。空间复杂度:O(1)。class Solution { public int removeDuplicates(int[] nums) { int j=0;//记录删除的个数==赋值时下标减少的值+1 for(int i=0;i<nums.length;i++){ while(((i+1原创 2020-07-14 20:34:01 · 161 阅读 · 0 评论 -
94.二叉树的中序遍历
1.递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { ...原创 2019-12-02 09:35:33 · 91 阅读 · 0 评论 -
LeetCode题解目录(java实现)
这篇博文作为日后在力扣刷题记录的链接汇总,希望能碰见一起学习交流技术的伙伴01.两数之和20.有效的括号42.接雨水原创 2019-12-01 13:11:01 · 415 阅读 · 0 评论 -
42.接雨水
1.暴力法对height[]遍历下标为1~height.length-1 的可能存水位置,存水位置的两边一定存在更大height[]值存水量 由两侧分别的最大值 中的 较小者 决定class Solution { public int trap(int[] height) { int ans=0; int size = height.length;...原创 2019-11-28 21:45:02 · 123 阅读 · 0 评论 -
LeetCode——20.有效的括号
1.通过HashMap和StackHashMap中通过键和值对应到左右括号,遇到左括号入栈 遇到右括号出栈通过HashMap匹配class Solution { private HashMap <Character,Character> mapp; public Solution(){ this.mapp=new HashMap<Charact...原创 2019-11-17 10:34:34 · 131 阅读 · 0 评论 -
LeetCode——1.Two Sum
1.暴力class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;i<nums.length;i++){ for(int j=0;j<nums.length;j++){ while(i!=j){ ...原创 2019-11-13 22:25:23 · 150 阅读 · 0 评论