
算法
小达学加瓦
欲成加瓦,必承其重
展开
-
【算法-Java实现】 换钱的方法数(暴力递归法)
【算法-Java实现】 换钱的方法数(暴力递归法)文章目录【算法-Java实现】 换钱的方法数(暴力递归法)一.问题描述:二.问题解答:**举例:****思路:==暴力递归==**三.算法分析:**使用递归时应该考虑1.如何设计递归函数 2.递归的终止条件**==代码如下==一.问题描述:给定一个整型数组arr,arr中的值为正数且不重复,每个值代表一种面值的货币,每种货币可以使用任意张。给定一个整数target,代表要换的钱数,求换钱的方法数。二.问题解答:该题有暴力递归法、记忆搜索法、动态规原创 2020-12-17 18:09:10 · 5297 阅读 · 8 评论 -
【算法-Java实现】两数之和
【算法-Java实现】两数之和一.问题描述:给定一个整数数组nums和一个目标值target,找出该数组中和为目标值的那两个整数,并返回他们的数组下标。本题来源:力扣1二.问题解答:解法1:暴力法双层for循环遍历,判断两个数相加是否为target即可第二个数只能是第一个数后面的数,所以第二层for循环从下标i+1开始代码如下class Solution { public int[] twoSum(int[] nums, int target) { for(int原创 2020-12-24 21:43:45 · 843 阅读 · 6 评论 -
【算法-Java实现】将数组按某值划分成左边小,中间相等,右边大的形式
【算法-Java实现】将数组按某值划分成左边小,中间相等,右边大的形式一.问题描述:1.输入:一个无序整型数组arr,其中arr中元素不唯一。如:int[] arr = { 3, 4, 6, 9, 5, 5, 8, 8, 2, 1, 7, 7, 0 };2.输出:将数组arr按某值划分成左边小,中间相等,右边大的形式,并输出。二.问题解答:此问题的另外一种问法:荷兰国旗问题有一个数组,只有红球,蓝球,黄球,请将红球放在数组左边,蓝球放在数组中间,黄球放在数组右边。思路:1.首先用一个基准n原创 2020-12-07 17:22:26 · 582 阅读 · 0 评论 -
【算法-Java实现】寻找只出现一次的数字
【算法-Java实现】寻找只出现一次的数字一.问题描述:给定一个非空整数数组,除了某个元素只出现一次,其他元素都出现两次。寻找那个只出现一次的元素。比如:输入:[2,2,1];输出:1输入:[1,2,2,3,4,3,4];输出:1二.问题解答:思路:异或运算由于本题中元素只有出现一次和出现两次的情况,因此最优解就是对数组元素进行异或运算。什么是异或运算?简单点来说就是两个数不同,异或结果为1;两个数相同,异或结果为0。异或就是表示不同时为1,相同时为0.异或运算的特点:1.任何数和0原创 2020-11-10 17:57:19 · 1113 阅读 · 0 评论 -
【算法-Java实现】盛最多水的容器
【算法-Java实现】盛最多水的容器一.问题描述:本题来源:LeetCode11:盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大原创 2020-10-30 22:41:48 · 953 阅读 · 5 评论 -
【算法-Java实现】跳跃游戏
【算法-Java实现】跳跃游戏一.问题描述:1.输入:输入一个数组arr,数组中的每个元素均为正整数,每个正整数表示在该位置可跳跃的最远距离。2.输出:若能够到达数组最后一个位置,则返回true;否则返回false。比如:输入[2,3,1,1,4] 输出:true分析:在位置(下标)0,可跳跃的最远距离为2,即可到达位置(下标)2; 在位置(下标)1,可跳跃的最远距离为3,即可到达位置(下标)4; 已经可以到达数组最后一个位置,因此返回原创 2020-10-27 18:42:40 · 1402 阅读 · 1 评论 -
【算法-Java实现】组合总和
【算法-Java实现】组合总和一.问题描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。比如:输入:[2,3,6,7];输出:[[7], [2, 2, 3]]输入:[3,4,5,6,7,8,9];输出:[[8], [4, 4], [3, 5]]本题来源:力扣39二.问题解答:思路:搜索回溯递归函数结构体:dfs(int[] cand原创 2020-10-25 14:14:32 · 1924 阅读 · 7 评论 -
【算法-Java实现】去除字符串中的重复字符
【算法-Java】去除字符串中的重复字符一.问题描述:1.输入:输入一个String字符串str。2.输出:去除这个字符串str的重复字符,按照字符出现的顺序输出这个无重复的字符串result。比如:输入:“hkdhkdhkd" 输出:”hkd“输入:“abbbcccd” 输出:“abcd”输入:”wxhxy“ 输出:“wxhy” 二.问题解答:1.首先,按照上面给出的输入输出案例,我们知道,得到的输出结果字符串result原创 2020-10-23 21:13:24 · 9781 阅读 · 0 评论 -
【算法-Java实现】计算int对应二进制中1的个数
【算法-java实现】计算int对应二进制中1的个数一.问题描述:1.输入:输入一个int类型整数2.输出:输出这个整数int对应二进制中1的个数比如:输入14,对应的二进制数是1110,则输出3 输入15,对应的二进制数是1111,则输出4二.问题解答:1.输入一int类型十进制数,转换为二进制数(除二取余法),创建一个String类型字符串s依次存入余数,将s转为字符数组,创建统计变量count统计数组中1的个数即可。2.为了方便将这个二进制数的打印,本题将Str原创 2020-10-22 11:32:08 · 1346 阅读 · 4 评论 -
【算法-Java实现】合并两个有序链表
【算法-java实现】合并两个有序链表一.问题描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。二.问题解答:方法:递归如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。本题解析:Leetcode21觉得讲的比较通俗易懂的:画解算法三.算法分析:1.时间复杂原创 2020-10-21 10:24:10 · 1794 阅读 · 0 评论 -
【算法-Java实现】在排序数组中查找元素的开始位置和结束位置
【算法】在排序数组中查找元素的开始位置和结束位置一.问题描述:1.输入:输入一个已经升序排列的整数型数组arr和一个目标值target。2.输出:输出这个目标值target在数组中的开始位置和结束位置的索引。若target在数组中不存在,则返回[-1,-1]。3.比如:输入{5,7,7,8,8,10},target=8 ;输出[3,4] 输入{5,7,7,8,8,10},target=6;输出[-1,-1] 输入{5,7,7,8,8,8原创 2020-10-20 00:59:05 · 1260 阅读 · 7 评论 -
【算法-Java实现】求连续子数组的最大累加和
【算法】求连续子数组的最大累加和一.问题描述:1.输入:输入一个字符串,该字符串为一组数据,其中每个数据之间用“,”隔开。(即输入String类型字符串,通过String类的split()方法将字符串转为String类型数组)2.输出:输出这个数组的子数组最大累加和。二.问题解答:1.若数组为空或者数组的长度为0,直接返回0。2.若输入的数组中数据没有正数,比如{-6,-2,-3,-5},则最大累加和是数组中的最大值,即-2。2.思路:初始化max=Integer.MIN_VALUE(以便于调原创 2020-10-18 23:08:23 · 892 阅读 · 1 评论