草庐IT

[牛客BM70&LeetCode322]零钱兑换Ⅰ——DFS,记忆化搜索,动态规划(C++)

题目描述给你一个整数数组arr,表示不同面额的硬币;以及一个整数aim,表示需要放入钱包的目标金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。每种硬币的数量无限。用例1:输入:[1,2,3],6输出:2(即3+3)思路一:深度优先搜索本题自然可以通过遍历所有可能的硬币组合以求得最少的硬币数量。每次都选择三种面额(以用例1举例)中的一枚放入到钱包中,直到钱包达到目标金额。上面这个思路其实就是深度优先搜索的方法(DFS)。递归深度就是使用的硬币的个数。然而这种方式将会出现大量的重复计算,比如用例中:6-2=4,6-1-1=4;导致4这个节点会被多

Java入门_一维数组_第二题_随机生成数

前提小白一个,啥都不会,欢迎指点。题目随机生成10个整数(1-100的范围),保存到数组,并倒序打印以及求平均值,求最大值和最大值的下标,并查找里面知否有8。思路随机生成-->采用random(),注意范围在(1-100)。求取最大值下标插入索引在再次建立一个索引,以此判断随机生成的数值里面是否有数值8,并给予反馈。初始代码publicclassJavatext5{publicstaticvoidmain(String[]args){int[]arr=newint[10];intsum=0;intmax=arr[0];intindex=-1,index2=0;for(inti=0;i=0;i-

Java入门_一维数组_第二题_随机生成数

前提小白一个,啥都不会,欢迎指点。题目随机生成10个整数(1-100的范围),保存到数组,并倒序打印以及求平均值,求最大值和最大值的下标,并查找里面知否有8。思路随机生成-->采用random(),注意范围在(1-100)。求取最大值下标插入索引在再次建立一个索引,以此判断随机生成的数值里面是否有数值8,并给予反馈。初始代码publicclassJavatext5{publicstaticvoidmain(String[]args){int[]arr=newint[10];intsum=0;intmax=arr[0];intindex=-1,index2=0;for(inti=0;i=0;i-

C#基础

1枚举enumE_MonsterType//定义了一个枚举的变量类型{normal1,//0boss=5,//5normal2,//6,前一个自动加1}//枚举和switch语句天生一对,写switch时能对枚举类型自动补全E_MonsterTypemonsterType=E_MonsterType.boss;/声明枚举变量switch(monsterType){caseE_MonsterType.normal1:Console.WriteLine("普通怪物逻辑");break;caseE_MonsterType.boss:Console.WriteLine("boss怪物逻辑");brea

C#基础

1枚举enumE_MonsterType//定义了一个枚举的变量类型{normal1,//0boss=5,//5normal2,//6,前一个自动加1}//枚举和switch语句天生一对,写switch时能对枚举类型自动补全E_MonsterTypemonsterType=E_MonsterType.boss;/声明枚举变量switch(monsterType){caseE_MonsterType.normal1:Console.WriteLine("普通怪物逻辑");break;caseE_MonsterType.boss:Console.WriteLine("boss怪物逻辑");brea

合并数组并排序去重

题意就是,我有两个数组,把他们两个合并。然后并去重,去重的逻辑是哪儿边的重复次数更多,我就留下哪儿边的。比如下面的数组中,一边有两个数字5,另一半有三个数字5。则我需要留下三个数字5,去掉两个数字5。循环往复,最后得到的结果在进行排序。数组一:[1,100,0,5,1,5]数组二:[2,5,5,5,1,3]最终的结果:[0,1,1,2,3,5,5,5,100]//判断出现次数最多的次数functionmaxNum(item,arr){letnum=0;arr.forEach(val=>{item===val&&num++})returnnum}functionfn(arr1,arr2){//使

合并数组并排序去重

题意就是,我有两个数组,把他们两个合并。然后并去重,去重的逻辑是哪儿边的重复次数更多,我就留下哪儿边的。比如下面的数组中,一边有两个数字5,另一半有三个数字5。则我需要留下三个数字5,去掉两个数字5。循环往复,最后得到的结果在进行排序。数组一:[1,100,0,5,1,5]数组二:[2,5,5,5,1,3]最终的结果:[0,1,1,2,3,5,5,5,100]//判断出现次数最多的次数functionmaxNum(item,arr){letnum=0;arr.forEach(val=>{item===val&&num++})returnnum}functionfn(arr1,arr2){//使

js 二维数组去重

定义 arr:[    [1,2,3],    [2,3,4],    [4,5,6],    [12,3,4],    [4,25,6],    [14,25,16],    [14,15,16],    [14,15,15,116,19],   ],   newarr:[],方法  //去重  quchong(){   varnewArr=[];   for(vari=0;i    for(varj=0;j     varv=this.arr[i][j];     //判断是否存在数组中,不存在在往下走     if(!newArr.includes(v)){      newArr.pu

iOS常见算法题

1、二分查找已知一个有序数组,和一个key,要求从数组中找到key对应的索引位置intbinaryFind(int*arr,intlen,intkey){intmin=0,max=len-1,mid;while(minarr[mid]){min=mid+1;}else{returnmid;}}return-1;}2、字符串反转-(void)strReverseTest{charstr[]="32415";intlen=strlen(str);for(inti=0;i3、有序数组合并将有序数组{1,4,6,7,9}和{2,3,5,6,8,9,10,11,12}合并为{1,2,3,4,5,6,6,

js 二维数组去重

定义 arr:[    [1,2,3],    [2,3,4],    [4,5,6],    [12,3,4],    [4,25,6],    [14,25,16],    [14,15,16],    [14,15,15,116,19],   ],   newarr:[],方法  //去重  quchong(){   varnewArr=[];   for(vari=0;i    for(varj=0;j     varv=this.arr[i][j];     //判断是否存在数组中,不存在在往下走     if(!newArr.includes(v)){      newArr.pu