Tag: 算法

有效地确定置换的奇偶性

我有一个长度为N的int[]数组,其中包含值0,1,2,….(N-1),即它表示整数索引的排列。 确定排列是奇数还是奇偶校验的最有效方法是什么? (如果可能的话,我特别希望避免为临时工作空间分配对象……)

从其他字符串集合的示例中拆分字符串

我想构建一个String集合(任何复杂的数据结构,如集合),我可以高效地使用它作为“示例”来知道我可以在哪里拆分给定的字符串。 在示例中,我有这个String集合: abaco代码,交换。 粗体字可以大胆。 树文件夹和叶子树。 和给定的字符串: omecodeexchangeuthercanbetreeofword 并从算法中获得如下内容: ome代码交换uther可以是word树 部分“ome”和“uther”不能被分割,因此将保持原样(如果我将此部分标记为NOT-RECOGNIZED,那将是很好的)。 我尝试分析KMP算法,但距离我的需求太远了,我想以有效的时间方式组织集合(小于线性到集合大小)。 我忘了说: 分裂是在字符串上,自然语言单词与俚语单词混合,所有单词都没有空格 我已经尝试过基于加权单词字典的动态算法,但是对于错误分割上的等效权重的错误主题太多(“错误”我的意思是自然语言) 我需要这个分割的最佳结果,使用字符串集合中的单词序列作为“好例子”

如何使用流将此程序转换为java 8function样式?

问题 我编写了一个程序来查找给定字符串的字符的大写和小写的所有可能性。 一个例子是,输入 – “ab”/“Ab”等 – 任何一个输出 – [“ab”,“Ab”,“aB”,“AB”] 码 算法不正确 – 请在下方查看。 public static ArrayList permuteUCLC(String a) { String s=new String(a.toLowerCase()); ArrayList arr = new ArrayList(); arr.add(a); int l = a.length(); for(int i=0;i<=l;i++) { for(int j=i+1;j<=l;j++) { arr.add(s.substring(0,i)+s.substring(i,j).toUpperCase()+s.substring(j,l)); } } Collections.sort(arr); Collections.reverse(arr); return arr; } 警告 在提出问题后我意识到我的算法是错误的。 我会在适当的时候尝试上传正确的算法。 子序列代码(正确代码)这是用于查找所有子序列并对其进行上限的代码。 假设所有字符都是唯一的。 如何查找索引并以function方式实现? public static void […]

Hackerrank:Sherlock和Anagrams(在Strings部分中等)

问题描述: https : //www.hackerrank.com/challenges/sherlock-and-anagrams 有人可以告诉我,我做错了什么? 我的算法是: 输入字符串; 海峡 生成从长度i = 1到str.length-2的模式字符串 检查str.substring(i + 1)中是否存在模式字符串的字谜 以下是未通过的测试用例: input-string My OP Expected OP ifailuhkqq 2 3 我的代码: public class SherlockandAnagrams { static int count = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); generatePairs(sc.next()); int len = 1; } public static void generatePairs(String str) […]

数组A的子集,如果我们对该子集的所有元素执行AND,则输出应为2的幂

我得到了这个问题的解决方案: 给定一个数组A.是否存在数组A的任何子集,如果我们对该子集的所有元素执行AND,则输出应该是2的幂(例如:1,2,4,8,16等等)。 输入:第一行包含多个测试用例T.每个测试第一行包含N个数组A,下一行包含N个空格分隔的整数。 输出:对于每个测试用例,如果存在arraysA的任何子集,则打印YES,如果我们对该子集的所有元素执行AND,则输出应该是其他两个打印NO的幂。 解决方案是这样的,但我无法理解下面的解决方案。 请帮忙。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); int N = Integer.parseInt(line); for (int i = 0; i < N; i++) { int num = Integer.parseInt(br.readLine()); int[] arr = new int[num]; String arrCnts = br.readLine(); String[] arrStr = arrCnts.split(" "); boolean flag = false; int max = […]

文本比较算法或程序?

我有两个段落有句子,我想比较两个段落,并希望在UI上显示差异。 以下是我可以考虑的可能用例。 任何算法或代码方面的帮助都会很明显。 案例1:从str2删除了Word String str1 = “Hello I am new How are you”; String str2 = “How are you Hello”; output : str1 = “Hello I am new How are you”; str2 = “How are you Hello” 案例2:Word添加到str2 String str1 = “Hello How are you what about you”; String str2 = “How are you […]

找到Factorial Trailing Zero时的结果不一致

这是我编写的两个版本的代码,用于返回n!中的尾随零的数量。 对于输入1808548329 ,第一个版本返回452137080对于输入1808548329 ,第二个版本返回1808548329 。 想知道为什么会有区别? 第二版的输出是正确的。 Java中的源代码 , public class TrailingZero { public static int trailingZeroes(int n) { int result = 0; int base = 5; while (n/base > 0) { result += n/base; base *= 5; } return result; } public static int trailingZeroesV2(int n) { return n == 0 ? 0 : […]

谷歌Foobar:把枪带到警卫队

我的情况 我现在已经开始和关闭这个挑战大约9天了,而且我没有想法。 到目前为止,我的解决方案通过了9/10的测试用例。 我的优化解决方案运行得足够快,因此错误是实际的解决方案,而不是计算时间不足。 如果有人能告诉我我缺少什么,或者我的算法实际上没有解决问题,我将不胜感激。 此外,我意识到我的一些代码并不完美 – 我计划在我有一个可行的解决方案之后解决所有问题。 问题 呃 – 哦 – 你已被一名指挥官Lambdas精英守卫逼入绝境! 幸运的是,当你穿过火车站时,你从一个废弃的护柱上抓起了一把光束武器,所以你有机会战胜你的出路。 但是光束武器对你和精英守卫都有潜在的危险:它的光束会reflection到墙壁上,这意味着你必须非常小心地射击,以避免向自己弹射! 幸运的是,光束在变得太弱而不会造成损坏之前只能行进一定的最大距离。 你也知道如果一个光束撞到一个角落,它将以完全相同的方向反弹。 当然,如果光束击中你或守卫,它会立即停止(虽然很痛苦)。 写一个函数答案(尺寸,your_position,guard_position,distance),它给出了房间宽度和高度的2个整数数组,房间中x和y坐标的2个整数数组,2个整数的数组考虑到光束可以传播的最大距离,守卫在房间内的x和y坐标,并返回可以射击以击中精英守卫的不同方向的数量的整数。 房间有整数尺寸[1 <x_dim <= 1000,1 <y_dim <= 1000]。 您和精英守卫都位于房间内不同的不同位置(x,y)的整数格上,使得[0 <x <x_dim,0 <y <y_dim]。 最后,光束在变为无害之前可以行进的最大距离将以1 <距离<= 10000的整数给出。 例如,如果你和精英守卫被放置在一个尺寸为[3,2],你有_1 [1,1],guard_position [2,1]和最大射击距离为4的房间里,你可以用七种不同的方式射击击中精英守卫的方向(从您的位置给出矢量方位):[1,0],[1,2],[1,-2],[3,2],[3,-2],[ – 3,2]和[-3,-2]。 作为具体的例子,轴承[1,0]的镜头是距离为1的直线水平镜头,轴承[-3,-2]的镜头在击中精英后卫之前从左墙和底壁反弹。总射门距离为sqrt(13),并且在击中精英后卫之前,轴承[1,2]的射击仅在顶壁反弹,总射击距离为sqrt(5)。 我未完成的解决方案(Java) public class Answer { public static int answer(int[] dimensions, int[] captain_position, int[] badguy_position, […]

Java算法填充单元格,如“Android – Flow”游戏

我有一个问题。 我们有一个表2xN ,其链接节点为1,6 -> 1,1和2,6 -> 2,1就像一个cilinder。 —————————————————– (1)->| 1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 | -> (1) —————————————————— (2)->| 2,1 | 2,2 | 2,3 | 2,4 | 2,5 | 2,6 | -> (2) —————————————————— 我有一个StartPoint1 – 是单元格1,1一个点和单元格2,6 EndPoint1 和一个StartPoint12 – 是单元格2,1一个点和单元格2,5 EndPoint2 我想在路上找到两个填充所有表格的组合。 例如上面是 (P1)=(1,1) – >(1,2) – >(1,3) […]

最长的子序列,动态编程

我有以下问题: 找到给定序列/数组的增长最长的子序列。 换句话说,找到数组的子序列,其中子序列的元素严格按顺序递增,并且子序列尽可能长。 该子序列不一定是连续的或唯一的。 在这种情况下,我们只关心最长的增长子序列的长度。 示例: 输入:[0,8,4,12,2,10,6,14,1,9,5,13,​​3,11,7,15]输出:6序列:[0,2,6,9, 13,15]或[0,4,6,9,11,15]或[0,4,6,9,13,15] 这是一个DP问题,我在记忆步骤中确实遇到了一些问题。 这是我的代码: public int lis(final List a) { return maxIncreasing(0, Integer.MIN_VALUE, a); } HashMap memo = new HashMap(); private int maxIncreasing(int index, int lastElt, final List a) { if(memo.containsKey(index)) return memo.get(index); // end? if(index >= a.size()) return 0; int weTake = Integer.MIN_VALUE; // can we take it? […]