算法
百味珍果糖
这个作者很懒,什么都没留下…
展开
-
计算汉明距离
计算汉明距离原创 2022-12-27 11:52:37 · 93 阅读 · 0 评论 -
位1的个数
位1的个数原创 2022-12-26 17:01:26 · 115 阅读 · 0 评论 -
2021-11-09
打乱数组public class Shuffle { public static void main(String[] args) { int[] arr = new int[10]; //初始化数组 for (int i = 0; i < arr.length; i++) { arr[i] = i; } System.out.println("数组打乱之前"); //打印原创 2021-11-09 23:53:45 · 92 阅读 · 0 评论 -
2021-10-15
买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1: 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。原创 2021-10-15 17:20:49 · 166 阅读 · 0 评论 -
2021-10-14
罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 X原创 2021-10-14 17:58:54 · 192 阅读 · 0 评论 -
2021-10-14
3的幂给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。示例 1: 输入:n = 27 输出:true示例 2: 输入:n = 0 输出:false示例 3: 输入:n = 9 输出:true示例 4: 输入:n = 45 输出:false方法1:一直除以3判断n是否能够被3整除,如果能够被3整除就除以3,直到不能被3整除为止,最后判断n是否等于1。 public boolean isPowerOfThree(i原创 2021-10-14 14:23:41 · 173 阅读 · 0 评论 -
2021-10-14
计数质数统计所有小于非负整数 n 的质数的数量。示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2: 输入:n = 0 输出:0示例 3: 输入:n = 1 输出:0厄拉多塞筛法:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,原创 2021-10-14 12:27:52 · 78 阅读 · 0 评论 -
2021-09-30
验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。递归实现:public boolean isValidBST(TreeNode root) { return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);}public boolean原创 2021-09-30 00:14:22 · 89 阅读 · 0 评论 -
2021-09-29
环形链表给定一个链表,判断链表中是否有环。方法1:快慢指针解决最简单的一种方式就是快慢指针,慢指针针每次走一步,快指针每次走两步,如果相遇就说明有环,如果有一个为空说明没有环。代码比较简单public boolean hasCycle(ListNode head) { if (head == null) return false; //快慢两个指针 ListNode slow = head; ListNode fast = head; wh原创 2021-09-29 00:53:41 · 80 阅读 · 0 评论 -
2021-09-29
回文链表给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。使用栈解决public boolean isPalindrome(ListNode head) { ListNode temp = head; Stack<Integer> stack = new Stack(); //把链表节点的值存放到栈中 while (temp != null) { stack.push(te原创 2021-09-29 00:21:45 · 69 阅读 · 0 评论 -
2021-09-25
反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。方法1:使用栈解决最简单的一种方式就是使用栈,因为栈是先进后出的。实现原理就是把链表节点一个个入栈,当全部入栈完之后再一个个出栈,出栈的时候在把出栈的结点串成一个新的链表。public ListNode reverseList(ListNode head) { Stack<ListNode> stack = new Stack<>(); //把链表节点全部摘掉放到栈中 whil原创 2021-09-25 22:55:32 · 65 阅读 · 0 评论 -
2021-09-24
删除链表中的节点编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。示例 1: 输入:head = [4,5,1,9], node = 5 输出:[4,1,9] 解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 示例 2: 输入:head = [4,5,1,9], node = 1 输出:[4,5,9] 解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,原创 2021-09-24 00:16:04 · 69 阅读 · 0 评论 -
2021-09-23
最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。public class StrLongestCommonPrefix { public static String longestCommonPrefix(String[] strs) { //边界条件判断 if (strs == null || strs.length == 0) return "";原创 2021-09-23 23:37:12 · 59 阅读 · 0 评论 -
2021-09-22
验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 解释:"amanaplanacanalpanama" 是回文串示例 2: 输入: "race a car" 输出: false 解释:"raceacar" 不是回文串方法1:双指针解决一个指向前,一个指向后,遇到空格以及特殊字符要跳过,然后判断,画个图来看下:public boolean原创 2021-09-22 21:07:48 · 87 阅读 · 0 评论 -
2021-09-19
有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false方法1:计算两个字符串中字符的差值先统计字符串s中每个字符的数量;减去t中每个字符对应的数量;如果最后结果都是0,说明t是s的字母异位词。原创 2021-09-19 18:31:49 · 92 阅读 · 0 评论 -
2021-09-18
字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例: s = "leetcode" 返回 0 s = "loveleetcode" 返回 2方法:两次遍历(借助HashMap)第一遍先统计每个字符出现的次数,第二遍再次从前往后遍历字符串s中的每个字符,如果某个字符出现一次直接返回,原来比较简单,看下代码public int firstUniqChar(String s) { Map<Character,原创 2021-09-18 00:11:09 · 76 阅读 · 0 评论 -
2021-09-17
整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。示例 1: 输入:x = 123 输出:321示例 2: 输入:x = -123 输出:-321示例 3: 输入:x = 120 输出:21示例 4: 输入:x = 0 输出:0public int reverse(int x) { int res = 0; while (x != 0) { int t = x % 10;原创 2021-09-17 23:29:01 · 70 阅读 · 0 评论 -
2021-09-14
旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]方法:先上下交换,再对角线交换 pu原创 2021-09-15 15:36:10 · 70 阅读 · 0 评论 -
2021-09-14
将两个有序数组合并为一个有序数组要求:不能调包,不能手动实现排序算法public class Sort { public static int[] sort(int[] num1, int[] num2){ //变量用于存储两个集合应该被比较的索引(存入新集合就加一) int a = 0; int b = 0; int[] num3 = new int[num1.length + num2.length]; for原创 2021-09-14 19:23:36 · 57 阅读 · 0 评论 -
2021-09-14
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。方法1:暴力破解法简单,但是效率低。public in原创 2021-09-14 00:44:06 · 73 阅读 · 0 评论 -
2021-09-12
两个数组的交集方法1:先对数组进行排序先对两个数组进行排序,然后使用两个指针,分别指向两个数组开始的位置。如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较一直重复上面的操作,直到其中一个指针不能再移动为止,最后再把集合list转化为数组即可。public class ArrJiaoJi { public static void interse原创 2021-09-12 02:15:55 · 82 阅读 · 0 评论 -
2021-09-05
**两个人坐在一张方桌子的两边,轮流在桌子上放硬币,且不能重叠,请问如何保证自己放的硬币多?**在放硬币时,先手是有优势的,需要保证自己是先放硬币的人,并且将硬币放在桌子的对称中心位置,以后每次放硬币的地方都是对手所放的地方的对称点,那么对手有地方放时先手一定有地方放硬币,先手就能保证胜券在握。因此我们用对称性思想很快就找到解决问题的方法。...原创 2021-09-05 21:04:24 · 68 阅读 · 0 评论