算法
算法
xiyuanda
这个作者很懒,什么都没留下…
展开
-
Java数组算法=>买股票时机
题目:给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路:实际上就是求这个数组中最大差值(不过大的数值必须要在小值的后面)暴力法public int maxProfit(int prices[]) { int ma..原创 2021-12-03 22:16:40 · 394 阅读 · 0 评论 -
取两个数组的交集
题目给你两个整数数组nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。思路解析:由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。首先遍历第一个数组,并在哈希表中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中.原创 2021-12-03 21:31:48 · 1631 阅读 · 0 评论 -
JAVA递归生成树形菜单
首先,编写数据模型Menu。每条菜单有自己的id、父节点parentId、菜单名称text、菜单还拥有次级菜单children。 public class Menu { private String id; private String parentId; private String text; private List<Menu> children; public Menu(String id,String parentId原创 2021-12-03 21:22:52 · 174 阅读 · 0 评论 -
八大排序(简记)
冒泡排序直接将最大值冒泡到最后一个位置public static void maopao(int[] arr){ for (int i=0;i<arr.length;i++){ for (int j = 0;j< arr.length-1-i;j++){ if (arr[j]>arr[j+1]){ int temp = arr[j];原创 2021-11-30 16:35:28 · 539 阅读 · 0 评论 -
删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:先定义一个变量初始值是数组的长度;遍历数组,由于会出现i+1的下表 所以i<length-1当判定当前数和下一个数相等时,将数组左移覆盖当前值,但是同时因为数组的最后两位一定会相等(因为你是覆盖过来数值 倒数俩数一样)所以让length-1,不对数组的最后的数进行判断。为了防原创 2021-11-30 12:06:36 · 556 阅读 · 0 评论 -
合并两个递增的有序数组
利用双指针的方法,每次将两个数组中的较小的数放入新数组,两个数组遍历一遍即可 int[] arr = new int[nums1.length]; int i = 0; int j = 0; while (i<m || j<n){ if (i == m){ arr[i+j] = nums2[j]; j++; }else if (原创 2021-11-30 11:19:43 · 549 阅读 · 0 评论 -
算法:有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足: 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的顺序闭合。 //先判断如果是长度为单数的字符串,直接返回false int n = s.length(); if (n % 2 == 1) { return fals...原创 2021-11-29 20:56:05 · 147 阅读 · 0 评论 -
数组的最大子序和
给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。解析:首先先定义一个最大和为max,初始值为nums[0];然后对数组进行遍历,如果当前值nums[i]和下一个值nums[i+1]的和大于nums[i+1],那么将两数之和赋给nums[i+1];遍历完成之后,整个数组中最大的值就是所求;(如过遇见负数相加后比负数大,但是和值会减小,所以整个数组中最大值实际上是不变的) public int maxSubArray(int[] nums) { ..原创 2021-11-29 20:24:06 · 114 阅读 · 0 评论 -
给定一个整数数组,判断是否存在重复元素
用哈希表解决:将数组中的数据一个个插入哈希表,如果哈希表中已经存在这个数据,返回true,否则返回false public boolean containsDuplicate(int[] nums) { Set<Integer> set = new HashSet<>(); for (int x : nums){ if (!set.add(x)){ return true;原创 2021-11-29 19:38:36 · 623 阅读 · 0 评论 -
找出字符串组中的最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。public String longestCommonPrefix(String[] strs) { 如果字符串组长度为0 返回“” if (strs.length==0){ return ""; } 假定第一个字符串就是最长公共前缀 遍历字符串组 如果发现不匹配 把第一个字符串缩短一位 String s = .原创 2021-11-27 15:27:52 · 717 阅读 · 0 评论 -
罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1 。12 写做XII,即为X+II。 27 写做XX...原创 2021-11-27 15:06:35 · 454 阅读 · 0 评论 -
整数反转(Integer.MAX_VALUE和Integer.MIN_VALUE的使用)
Integer.MAX_VALUE =2^31-1=2147483647Integer.MIN_VALUE =-2^31=-2147483648一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231,231− 1] ,就返回 0。假设我们只用int类型 不考虑使用long类型public int reverse(int x) { int num = 0; int r...原创 2021-11-26 10:54:40 · 872 阅读 · 0 评论 -
判断一个整数x是不是回文数
小知识:int类型转字符串=>int x = 123;String str = x + "";字符串获取某个位置的字符=>int index = 0;String str = "123456";str.charAt(index);题解回文数:正序(从左向右)和倒序(从右向左)读都是一样的整数。(这里我们认为负数都不算回文数,0是回文数)public boolean isPalindrome(int x) { if (x<0.原创 2021-11-26 11:05:16 · 559 阅读 · 0 评论