力扣Hot100

力扣100题easy

1. 两数之和

时间空间复杂度为O(N),思路是:创建一个哈希表,对于每一个 x,先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();for(int i = 0; i < nums.length; i++){if(hashtable.containsKey(target - nums[i])){ //存在target - xreturn new int[]{i, hashtable.get(target - nums[i])};}hashtable.put(nums[i], i);}return new int[0];}
}

21. 合并两个有序链表

用递归的思路:判断 l1l2 哪一个链表的头节点的值更小,递归地决定下一个添加到结果里的节点。

class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if (l1 == null) {return l2;} else if (l2 == null) {return l1;} else if (l1.val < l2.val) {l1.next = mergeTwoLists(l1.next, l2); //选了此时的l1,再l1.next与l2比小return l1;} else {l2.next = mergeTwoLists(l1, l2.next);return l2;}}
}

160. 相交链表

思路一:哈希集合存放不重复的元素,先将A链表的结点add后,再依次判断B链表的结点是否有相同的。

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {Set<ListNode> set = new HashSet<ListNode>();ListNode p = headA, q = headB;while(p != null){set.add(p);p = p.next;}while(q != null){if(set.contains(q)){return q;}q = q.next;}return null;   }
}

思路二:用双指针,先判断A、B链表是否为空,有空的则根本无法相交。都不为空则要同时更新pqp不为空就next,为空则指向headBq同理,最后指向同一个结点或者null,返回即可。

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if(headA == null || headB == null){return null;}ListNode p = headA, q = headB;while(p != q){p = p == null ? headB : p.next;q = q == null ? headA : q.next;}return p;}
}

234. 回文链表

要学的思路是把链表的值复制到数组中,再用双指针进行判断。

class Solution {public boolean isPalindrome(ListNode head) {List<Integer> array = new ArrayList<Integer>();ListNode p = head;while(p != null){array.add(p.val);p = p.next;}//用双指针判断是否是回文int front = 0;int back = array.size() - 1;while(front < back){if(!array.get(front).equals(array.get(back))){return false;}front++;back--;}return true;}
}

283. 移动零

思路:分两次遍历,j用来记录当前数组中非0的元素,每遇到一个非0元素就往数组左边挪,遍历完后,j指向的是最后一个非0元素下标。第二次遍历就从j开始到结束,将其置为0。

class Solution {public void moveZeroes(int[] nums) {if(nums == null){return;}int j = 0;for(int i = 0; i < nums.length; i++){if(nums[i] != 0){nums[j++] = nums[i];}}for(int i = j; i < nums.length; i++){nums[i] = 0;}}
}	

101. 对称二叉树

要镜像对称,左右两边是相当的。递归的终止条件:两个结点为空;其中一个结点为空;两个结点不相等。随后再比较left.left, right.rightleft.right, right.left

class Solution {public boolean isSymmetric(TreeNode root) {if(root == null){return true;}return dfs(root.left, root.right);}public boolean dfs(TreeNode left, TreeNode right){if(left == null && right == null){return true;}else if(left == null || right == null){return false;}else if(left.val != right.val){return false;}return dfs(left.left, right.right) && dfs(left.right, right.left);}
}

543. 二叉树的直径

思路:求直径等同于求路径经过节点数的最大值 - 1。定义一个递归函数,返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度 L 和 R,则该节点为根的子树的深度即为max(L, R) + 1。设置一个全局变量ans记录,最后返回ans - 1就是直径。

class Solution {int ans;public int diameterOfBinaryTree(TreeNode root) {ans = 1;depth(root);return ans - 1;}public int depth(TreeNode node){if(node == null){return 0;}int L = depth(node.left);int R = depth(node.right);//ans是所有节点经过节点数的最大值ans = Math.max(ans, L + R + 1);//返回该节点为根的子树的深度return Math.max(L, R) + 1;}
}

20. 有效的括号

class Solution {public boolean isValid(String s) {if(s.isEmpty()){return true;} Stack<Character> stack = new Stack<Character>();for(char c : s.toCharArray()){if(c == '('){stack.push(')');}else if(c == '{'){stack.push('}');}else if(c=='['){stack.push(']');}else if(stack.empty() || c != stack.pop()){return false;}}if(stack.empty()){return true;}return false;}
}

121. 买卖股票的最佳时机

两层循环超出时间,思路是:要在价格最低的那天买入用min来记录,那第i天的利益就是prices[i] - min,这样只需要一次循环。

class Solution {public int maxProfit(int[] prices) {int min = Integer.MAX_VALUE;int max = 0;for(int i = 0; i < prices.length; i++){if(prices[i] < min){min = prices[i];}else if(prices[i] - min > max){max = prices[i] - min;}}return max;}
}

70. 爬楼梯

思路:跟斐波拉契数列思路很像,只是初始值不同。f(0) = 1f(1) = 1f(2) = 2。状态转移方程是:f(n) = f(n - 1) + f(n - 2)。如果是建立长度为ndp数列,则空间复杂度是O(n),可以用滚动数组的思想进行状态压缩。

class Solution {public int climbStairs(int n) {int sum = 1; //相当于f(n),f(n - 1) + f(n - 2)int i = 0, j = 0; for(int k = 0; k < n; k++){//数组向前移动i = j;j = sum;sum = i + j;}return sum;}
}

118. 杨辉三角

思路:两层循环,i表示行数,第一个和最后一个都是1,即j == 0 || j == i。中间的数就是上一行左上角加右上角,即[i - 1][j] + [i - 1][j - 1]

class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<List<Integer>>();for(int i = 0; i < numRows; i++){ //代表当前行数List<Integer> list = new ArrayList<Integer>();for(int j = 0; j <= i; j++){if(j == 0 || j == i){list.add(1);}else{list.add(ret.get(i - 1).get(j) + ret.get(i - 1).get(j - 1));}}ret.add(list);}return ret;}
}

136. 只出现一次的数字

思路:用异或运算。num与0异或还是numnumnum异或是0,并且符合交换律吧。将数组中所有数字异或,出现两次的数异或后均为0,最后剩下的数就是只出现一次的数。

class Solution {public int singleNumber(int[] nums) {int single = 0;for(int num : nums){single ^= num;}return single;}
}

169. 多数元素

思路:先将数组排序,既然多数元素出现次数大于⌊ n/2 ⌋,那排序后它一定在nums[length / 2]的位置。

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}
}

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

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

相关文章

Cookie、Session和JWT

摘要&#xff1a;Cookie、Session和JWT都不是什么新的技术了&#xff0c;最近用到了就比较和总结下。 我们知道http协议是无状态的&#xff0c;用户登录后如何验证和保存用户状态呢&#xff1f;下面来介绍 1. 使用Cookie和Session验证登录状态 session是保存在服务端的一种数…

STM32串口通信(发送与接收数据)

文章目录 前言一、介绍部分通信接口术语解释 串口通信简介硬件电路电平标准串口参数串口时序USART简介USART框图USRAT基本结构数据帧起始位检测波特率发生器CH340G 二、实例部分使用串口发送数据接线图代码实现重定向printf需要勾上Use MicroLIB中文不乱码方法 串口的发送与接收…

C++ 之LeetCode刷题记录(三十六)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你…

题目 1036: [编程入门]带参数宏定义练习

问题描述&#xff1a; 定义一个带参的宏&#xff0c;使两个参数的值互换&#xff0c;并写出程序&#xff0c;输入两个数作为使用宏时的实参。输出已交换后的两个值。 样例输入&#xff1a; 1 2 样例输出&#xff1a; 2 1 问题分析&#xff1a; 无 代码…

Qt篇——QTableWidget常用设置

//表格颜色间隔显示 ui->originDataTable->setAlternatingRowColors(true); //设置表格列数 ui->originDataTable->setColumnCount(3); //设置表格头 QStringList headerList1; headerList1 << QString::from…

LeetCode #2605 从两个数字数组里生成最小数字

题目 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 &#xff0c;每个数组中的元素 互不相同 &#xff0c;请你返回 最小 的数字&#xff0c;两个数组都 至少 包含这个数字的某个数位。 示例 1&#xff1a; 输入&#xff1a;nums1 [4,1,3], nums2 [5,7] 输出&#…

Python 从文件中读取JSON 数据并解析转存

文章目录 文章开篇Json简介Json数据类型Json硬性规则Json数据转化网站Json和Dict类型转换json模块的使用Python数据和Json数据的类型映射json.dumps1.字典数据中含有**存在中文**2.json数据通过缩进符**美观输出**3.对Python数据类型中键进行**排序输出**4.json数据**分隔符的控…

【软件测试】接口调不通排查分析+常遇面试题总结

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口调不通&am…

【论文阅读】深度学习在过冷沸腾气泡动力学分割中的应用

Application of deep learning for segmentation of bubble dynamics in subcooled boiling 深度学习在过冷沸腾气泡动力学分割中的应用 期刊信息&#xff1a;International Journal of Multiphase Flow 2023 级别&#xff1a;EI检索 SCI升级版工程技术2区 SCI基础版工程技术3区…

(libusb) usb口自动刷新

文章目录 libusb自动刷新程序Code目录结构Code项目文件usb包code包 效果描述重置reset热拔插使用 END libusb 在操作USB相关内容时&#xff0c;有一个比较著名的库就是libusb。 官方网址&#xff1a;libusb 下载&#xff1a; 下载源码官方编好的库github&#xff1a;Release…

新的一年,如何优化企业库存管理?

随着社会的发展和经济的不断增长&#xff0c;库存管理成为了企业运营中非常重要的一环。库存作为企业的资产之一&#xff0c;直接影响着企业的盈利能力和竞争优势。因此&#xff0c;对企业库存进行科学的分析和管理&#xff0c;成为了确保企业持续稳定发展的必要手段之一。企业…

比亚迪领航新能源时代:汉唐传承,品牌力量

比亚迪&#xff0c;以中国文化的深度与自信&#xff0c;为新能源汽车领域注入强大动力。汉唐车型&#xff0c;不仅承载着中国古代文明的辉煌&#xff0c;更以其创新技术和环保理念&#xff0c;终结油电之争&#xff0c;让燃油车再次破防。作为销量冠军&#xff0c;比亚迪品牌的…

android开发与实战,那些年Android面试官常问的知识点

前言 在做android项目开发时&#xff0c;大家都知道如果程序出错了&#xff0c;会弹出来一个强制退出的弹 出框&#xff0c;这个本身没什么问题&#xff0c;但是这个UI实在是太丑了&#xff0c;别说用户接受不了&#xff0c;就连 我们自己本身可能都接受不了。虽然我们在发布程…

1.2 debug的六种指令的使用,四个通用寄存器

汇编语言 首先进入环境 mount c d:masm //把c挂载在d盘中的masm当中 c: //进入c&#xff0c;进入到编译环境 dir //查看文件&#xff0c;可有可无Debug是DOS、Windows都提供的实模式&#xff08;8086 方式&#xff09;程序的调试工具。使用它可以查看CPU各种寄存器中的内容…

C语言基础18 循环

们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个语句或语句组&#xff0…

为什么模型需要激活函数?

模型需要激活函数的原因主要是为了增加神经网络模型的非线性能力。没有激活函数&#xff0c;不论神经网络有多少层&#xff0c;它本质上还是一个线性回归模型&#xff0c;这意味着它只能学习输入和输出之间的线性关系。激活函数通过引入非线性因素&#xff0c;使得神经网络能够…

leetcode刷题(剑指offer) 46.全排列

46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#…

计算机组成原理

计算机组成原理是计算机科学中的一门重要课程&#xff0c;主要研究计算机硬件系统的基本组成和工作原理。以下是一份关于计算机组成原理的3000字概述&#xff0c;由于篇幅限制&#xff0c;我将提供一个摘要版本。若需要更详细的内容&#xff0c;请随时告知。 一、引言 计算机&…

信息安全技术基础

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/136331705 一、信息安全基础 1、信息安全的基本要素有机密性、完整性、可用性、可控性与可审查性。信息安全的范围包括设备安全、数据安全、内容安全和行为安全。其中数据安全即采取措施确保数据免受未…

OpenAI Triton 入门教程

文章目录 Triton 简介背景Triton 与 CUDA 的关系 Triton 开发样例样例一&#xff1a;Triton vector addition 算子Triton kernel 实现kernel 函数封装函数调用性能测试 样例二&#xff1a;融合 Softmax 算子动机Triton kernel 实现kernel 封装单元测试性能测试 样例三&#xff…