Java解决LeetCode热点编程题

需积分: 5 0 下载量 11 浏览量 更新于2024-12-03 收藏 5KB ZIP 举报
资源摘要信息:"LeetCodeProblems" 1. 二的幂 问题描述:判断给定的整数是否为2的幂次方。 知识点: - 整数表示和位操作 - 二进制数的理解 - 对于2的幂次方数,其二进制表示只有一个1,其余都是0。 - 利用位运算符`&`,对于2的幂次方数,`n & (n - 1)`的结果总是0,因为只有最后一位是1。 示例代码(Java): ```java public boolean isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; } ``` 2. 单一号码 问题描述:给定一个包含2n + 1个数字的数组,找到数组中唯一一个未重复的数字。 知识点: - 数组操作 - 哈希表(如果可以使用额外空间) - 异或运算,因为异或运算有交换律和结合律,相同数字异或结果为0,任何数与0异或结果为它自己。 示例代码(Java): ```java public int singleNumber(int[] nums) { int single = 0; for (int num : nums) { single ^= num; } return single; } ``` 3. 嘶嘶声 问题描述:在英语中,只有1、21、22这样的数字才会发出嘶嘶声,输入一个整数,判断其是否为嘶嘶声数字。 知识点: - 数字到字符串的转换 - 字符串遍历 - 特定数字的发音规则 4. 包含重复项 问题描述:判断一个数组是否包含重复元素。 知识点: - 数组遍历 - 哈希集合(如果可以使用额外空间) - 排序后比较相邻元素(如果不使用额外空间) 示例代码(Java): ```java public boolean containsDuplicate(int[] nums) { Set<Integer> set = new HashSet<>(); for (int num : nums) { if (set.contains(num)) { return true; } set.add(num); } return false; } ``` 5. 反向字符串 问题描述:编写一个函数,其作用是将输入的字符串反转过来。 知识点: - 字符串操作 - 字符数组操作 - 字符串逆转算法 示例代码(Java): ```java public String reverseString(String s) { char[] str = s.toCharArray(); int n = str.length; for (int i = 0; i < n / 2; i++) { char temp = str[i]; str[i] = str[n - 1 - i]; str[n - 1 - i] = temp; } return new String(str); } ``` 6. 移动零 问题描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 知识点: - 数组操作 - 双指针技术 - 元素交换和位置调整 示例代码(Java): ```java public void moveZeroes(int[] nums) { int j = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[j] = nums[i]; if (i != j) { nums[i] = 0; } j++; } } } ``` 7. 两个和 问题描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 知识点: - 数组遍历 - 哈希表 - 查找算法 示例代码(Java): ```java public int[] twoSum(int[] nums, int target) { HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); } ``` 8. 买卖股票的最佳时间 问题描述:给定一个数组 prices,其第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 知识点: - 动态规划 - 股票交易模型 - 利润最大化策略 示例代码(Java): ```java public int maxProfit(int[] prices) { int maxprofit = 0; for (int i = 1; i < prices.length; i++) { if (prices[i] > prices[i - 1]) maxprofit += prices[i] - prices[i - 1]; } return maxprofit; } ``` 以上知识点涵盖了数组操作、位运算、字符串处理、动态规划、哈希表等在编程中常用的算法和数据结构。通过解决这些问题,可以提高编程能力和逻辑思维能力。在LeetCode平台上练习这些问题,还可以帮助程序员准备面试,尤其是对那些希望在IT行业中找到工作的求职者。