所以,我有一个只包含0和1的数组.我必须找出包含相同数字0和1的最大子阵列.一个天真的方法可能是复杂的,O(n^2)因为我采用外循环中的每个元素,并在内循环中计算可能的子数组,并保持更新最大大小(如果找到).还有其他更好的方法(比如O(n))我可以使用吗?谢谢!
Input: arr[] = {1, 0, 1, 1, 1, 0, 0}
Output: 1 to 6 (Starting and Ending indexes of output subarray)
Run Code Online (Sandbox Code Playgroud) 问题来自:https: //www.hackerrank.com/contests/epiccode/challenges/white-falcon-and-sequence.访问参考链接.
我有一个整数序列(-10 ^ 6到10 ^ 6)A.我需要选择A的两个连续的不相交子序列,比如x和y,它们具有相同的大小n.
之后,您将计算由?x(i)y(n?i+1)(1索引)给出的总和
而且我必须选择x和y,以便最大化和.
Eg:
Input:
12
1 7 4 0 9 4 0 1 8 8 2 4
Output: 120
Where x = {4,0,9,4}
y = {8,8,2,4}
?x(i)y(n?i+1)=4×4+0×2+9×8+4×8=120
Run Code Online (Sandbox Code Playgroud)
现在,我想到的方法是O(n ^ 2),如下所示:
l = 0和r = N-1.这里N是数组的大小.l=0,我将计算总和,(l<r)而基本上是指从数组中的第0个位置开始的子序列.然后,我将递增l和递减r,以便得出从上面的位置+ 1开始并在右侧开始的子序列right-1.我可以使用更好的方法吗?什么更有效率?我想过排序,但我们不能对数字进行排序,因为这会改变数字的顺序.
我最近在一次采访中遇到了这个问题.我真的无法想出答案.我开始,从第一个数组中获取第一个元素,然后在另一个数组中找到比这个元素多的元素.但是,我的意思是,我不知道,无法真正形成解决方案.问题如下:
给定两个排序的数组A和B,生成所有可能的数组,使得第一个元素从A中取出,然后从B中取出,然后从A中取出,依此类推,直到数组耗尽为止.生成的数组应以B中的元素结尾.
Eg:
A = {10, 15, 25}
B = {1, 5, 20, 30}
The resulting arrays are:
10 20
10 20 25 30
10 30
15 20
15 20 25 30
15 30
25 30
Run Code Online (Sandbox Code Playgroud)
我不是在寻找一个代码,只需一个algo/pseduo-code就行了.谢谢!
我最近在一次采访中遇到了这个问题.我无法想出一个算法.
给定一个未排序的整数数组,我们必须找到将此数组转换为算术级数的最小成本,如果在数组中更改了任何元素,则会产生1个单位的成本.此外,元素的值介于(-inf,inf)之间.
我有点意识到DP可以在这里使用,但我无法解决这个问题.价值观受到一些限制,但我不记得了.我只是在寻找高级伪代码.
计数排序基本上是将计数值存储在哈希表排序结构中,然后打印出这些值。
我采用的方法是:
遍历输入数组并按以下方式存储总计数 count[arr[i]]++
同样,遍历 count 数组并打印i(th)索引号,次数与 中的值一样多count[arr[i]]。这不是正确的方法吗?
在我阅读教程的大多数地方,他们将先前元素的计数总和存储在计数数组中,然后通过首先减少计数然后打印它来放置在排序数组中。
我的方法有问题吗?
谢谢!
Multiply two numbers without using * operator, and with minimum number of additions
Run Code Online (Sandbox Code Playgroud)
例如:如果输入为5*8,则可以使用以下方法之一添加较大数量的较小次数,这将是答案.但是,如何最大限度地减少添加次数?
所以,让我们说,我有:
file1.c
int i;
static int j;
int main ()
{
for ( int k = 0; k < 10; k++ )
{
int foo = k;
}
}
Run Code Online (Sandbox Code Playgroud)
file2.c
{
// the following statements are before main.
extern int i; // this is acceptable, I know since i acts as a global variable in the other file
extern int j; // Will this be valid?
extern int foo; // Will this be valid as well?
}
Run Code Online (Sandbox Code Playgroud)
因此,我怀疑带有问号的陈述是否有效?
#include <stdio.h>
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int *p = arr;
++*p;
p += 2;
printf("%d", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
prefix的优先级++大于dereferencing,因此,p现在应该指向第二个元素.因此,当我们添加2它时,它应该指向第4个元素,答案应该是4.但是,答案是3,为什么呢?
我在一次采访中得到了这个问题,如下:
如果我有这样的链表,
1->2->3->4->5->6
我必须将其转换为
1->6->2->5->3->4
如果是这样的话,
1->2->3->4->5->6->7
我必须将其转换为
1->7->2->6->3->5->4
而且,最重要的是,我必须修改原始链表,无法创建新的链表。我想到了一个递归。但是,我真的解决不了。此外,他们限制了这个函数只能有链表的头部。