网站如何做电脑销售长鳖春遇网站开发

当前位置: 首页 > news >正文

网站如何做电脑销售,长鳖春遇网站开发,类似一起做网站的网站,网络棋牌推广平台有哪些哈希表理论基础 [LeetCode] 242. 有效的字母异位词 [LeetCode] 242. 有效的字母异位词 文章解释 [LeetCode] 242. 有效的字母异位词 视频解释 题目: 给定两个字符串 s 和 t #xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意#xff1a;若 s 和 t 中每个字符出… 哈希表理论基础 [LeetCode] 242. 有效的字母异位词 [LeetCode] 242. 有效的字母异位词 文章解释 [LeetCode] 242. 有效的字母异位词 视频解释 题目: 给定两个字符串 s 和 t 编写一个函数来判断 t 是否是 s 的字母异位词。 注意若 s 和 t 中每个字符出现的次数都相同则称 s 和 t 互为字母异位词。 示例 1: 输入: s anagram, t nagaram 输出: true示例 2: 输入: s rat, t car 输出: false 提示: 1 s.length, t.length 5 * 104s 和 t 仅包含小写字母 进阶: 如果输入字符串包含 unicode 字符怎么办你能否调整你的解法来应对这种情况 自己看到题目的第一想法 因为前一晚先看了视频, 加上之前自己实现过, 所以印象挺深的. 看完代码随想录之后的想法 使用数组做哈希表, 哈希表的索引为字母在 26 个字母表的位置, 这样可以提高搜索的速度. // 方案一: 这个方案对于 characterCount 中的数据做的剪发操作会比方案二多不少 // 因此在大量随机输入的情况下效率没有方案二高 class Solution {public boolean isAnagram(String s, String t) {if (s null || t null || s.length() ! t.length()) {return false;}int[] characterCount new int[26];for (int i 0; i s.length(); i) {characterCount[s.charAt(i) - a];characterCount[t.charAt(i) - a]–;}for (int i 0; i characterCount.length; i) {if (characterCount[i] ! 0) {return false;}}return true;} } // 方案二 class Solution {public boolean isAnagram(String s, String t) {if (s null || t null || s.length() ! t.length()) {return false;}int[] characterCount new int[26];for (int i 0; i s.length(); i) {characterCount[s.charAt(i) - a];}for (int i 0; i t.length(); i) {characterCount[t.charAt(i) - a]–;if (characterCount[t.charAt(i) - a] 0) {return false;}}return true;} }自己实现过程中遇到哪些困难 如果按照视频里的解法, 效率好像会稍微低一些, 将判断是否异位词的逻辑修改成每次对第二个字符串中的字符, 每减一就判断一次, 这样可以减少一些减法操作, 效率提升了一些. [LeetCode] 349. 两个数组的交集 [LeetCode] 349. 两个数组的交集 文章解释 [LeetCode] 349. 两个数组的交集 视频解释 题目: 给定两个数组 nums1 和 nums2 返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1 输入nums1 [1,2,2,1], nums2 [2,2] 输出[2]示例 2 输入nums1 [4,9,5], nums2 [9,4,9,8,4] 输出[9,4] 解释[4,9] 也是可通过的提示 1 nums1.length, nums2.length 10000 nums1[i], nums2[i] 1000 自己看到题目的第一想法 两个 for 循环, 再将相等的数据放到 Set 集合里. 看完代码随想录之后的想法 通过 Set 保存一个数组的数据, 再通过另一个遍历另一个数组将同时出现在被遍历数组和 Set 中的数字, 保存到结果中并返回. class Solution {public int[] intersection(int[] nums1, int[] nums2) {SetInteger comparedSource new HashSet();for (int i 0; i nums1.length; i) {comparedSource.add(nums1[i]);}ListInteger result new ArrayList();for (int i 0; i nums2.length; i) {if (comparedSource.remove(nums2[i])) {result.add(nums2[i]);}}int[] resultArray new int[result.size()];for (int i 0; i result.size(); i) {resultArray[i] result.get(i);}return resultArray;} } 自己实现过程中遇到哪些困难 Java 的 ListInteger 转为 int[] 没找到合适的 API. [LeetCode] 202. 快乐数 [LeetCode] 202. 快乐数 文章说明 题目: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为 对于一个正整数每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true 不是则返回 false 。 示例 1 输入n 19 输出true 解释(左边的数表示底数, 右边的数表示指数, 1^2则表示1的平方) 1^2 9^2 82 8^2 2^2 68 6^2 8^2 100 1^2 0^2 0^2 1示例 2 输入n 2 输出false 提示 1 n 231 - 1 自己看到题目的第一想法 1. 为什么一个整数的每个位置的数平方后, 再把这些平方值相加. 最终不是得到1, 就是得到一个循环的过程呢? 算了, 题目这么说就这么信吧! 2. 既然会出现循环, 那就不能让程序出现死循环. 所以我要记录住每个数字拆解后出现的序列(这里就是愚蠢的开始), 如果后续再出现这个序列, 我就要终止比对. 如果出现需要判断一个对象是否出现在列表里, 就要考虑用哈希表! 我懂! 每个序列有长度, 我把相同长度的序列放在Map的同一个索引下, 与是愚蠢的 ListInteger, ListListInteger 出现了. 当然后面就越写越奇怪, 越写越乱. 3. 在第2步的愚蠢之下, 迎来了意思曙光. 不管是 212、 122 还是 221, 如果出现循环的话, 最终一定会回到2^21^12^25, 所以只要5重复出现, 就表示循环了. 所以我要记录的只是所有数的平方和是否重复出现就可以了… 这么简单的道理我到底在复杂些什么? 看完代码随想录之后的想法 如我看到题目的第一想法的第3步, 基本没有太多差别了. 算法的精妙就在于, 一旦想明白, 就会觉得豁然开朗以及否定自我. 为什么我会如此愚蠢呢, 这么简单的事情都没想到. class Solution {public boolean isHappy(int n) {SetInteger squareSum new HashSet();while ((n getNumber(n)) ! 1) {if (!squareSum.add(n)) {return false;}}return true;}private int getNumber(int number) {int result 0;int currentNumber;while (number 0) {currentNumber number - (number/10)*10;result currentNumber * currentNumber;number / 10;}return result;} } 自己实现过程中遇到哪些困难 想明白了就很简单了, 没有遇到判断条件不确定等问题. [LeetCode] 1. 两数之和 [LeetCode] 1. 两数之和 文章解释 [LeetCode] 1. 两数之和 视频解释 题目: 给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target  的那 两个 整数并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1 输入nums [2,7,11,15], target 9 输出[0,1] 解释因为 nums[0] nums[1] 9 返回 [0, 1] 。示例 2 输入nums [3,2,4], target 6 输出[1,2]示例 3 输入nums [3,3], target 6 输出[0,1]提示 2 nums.length 104-109 nums[i] 109-109 target 109只会存在一个有效答案 进阶你可以想出一个时间复杂度小于 O(n2) 的算法吗 自己看到题目的第一想法  嗯… 虽然看了视频, 依旧会看到之前自己的解答. 果然是爽循环 O(n^2) 的暴力解法. 看完代码随想录之后的想法 x y z, 已知 z 和 y 的条件下, x 可知. 所以问题退化成寻找 x 是否在数组中出现. 当需要判断一个对象是否在数组中出现的时候, 考虑哈希表. 这里需要返回对应数字的下表, 因此需要用 Map, 将数字和数字所在的下标做一个映射. class Solution {public int[] twoSum(int[] nums, int target) {MapInteger, Integer existsNumbers new HashMap();int[] result new int[2];for (int i 0; i nums.length; i) {if (existsNumbers.containsKey(target - nums[i])) {result[0] existsNumbers.get(target - nums[i]);result[1] i;return result;} else {existsNumbers.put(nums[i], i);}}return result;} } 自己实现过程中遇到哪些困难 无