我想按字典顺序对大量整数(比如说1个元素)进行排序.
例:
input [] = { 100, 21 , 22 , 99 , 1 , 927 }
sorted[] = { 1 , 100, 21 , 22 , 927, 99 }
Run Code Online (Sandbox Code Playgroud)
我用最简单的方法完成了它:
std:sort
与strcmp
作为比较功能有没有比这更好的方法?
我看过很多帖子但没找到像我想要的东西.
我输错了:
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...... // may be this is EOF character
Run Code Online (Sandbox Code Playgroud)
进入无限循环.
我的算法:
码:
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
FILE *f1=fopen("input.txt","r");
FILE *f2=fopen("output.txt","w");
int i,j,pos;
int count=0;
char ch;
int begin=ftell(f1);
// GO TO END OF FILE
fseek(f1,0,SEEK_END);
int end = ftell(f1);
pos=ftell(f1);
while(count<10)
{
pos=ftell(f1);
// FILE IS LESS THAN 10 LINES
if(pos<begin)
break;
ch=fgetc(f1);
if(ch=='\n')
count++;
fputc(ch,f2);
fseek(f1,pos-1,end);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
UPD 1:
改变了代码:它现在只有1个错误 - 如果输入有像这样的行
3enil
2enil …
Run Code Online (Sandbox Code Playgroud) 是什么意思 (number) & (-number)
?我搜索了它但却无法找到意义
我想i & (-i)
在for循环中使用:
for (i = 0; i <= n; i += i & (-i))
Run Code Online (Sandbox Code Playgroud) 我注意到,逐字节读取文件比读取文件需要更多时间来读取整个文件fread
.
根据cplusplus:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
从流中读取一个count
元素数组,每个元素都有一个size
字节大小,并将它们存储在指定的内存块中ptr
.
Q1)因此,再次fread
读取1个字节的文件,所以它不是以1字节方法读取的方式吗?
Q2)结果证明仍然fread
需要较少的时间.
从 这里:
我用一个大约44兆字节的文件作为输入运行它.使用VC++ 2012编译时,我得到以下结果:
使用getc计数:400000时间:2.034
使用fread计数:400000时间:0.257
SO上的帖子也很少谈论它取决于操作系统.
Q3)操作系统的作用是什么?
为什么会如此以及幕后背后到底是什么?
n
给出了大小的图形,并给出了m
其节点大小的子集.查找distance <=k
子集的所有节点中的所有节点.
例如 A-> B-> C-> D-> E是图, subset
= {A,C}, k
= 2.
现在,E与C的距离<= 2,但不是距离A,因此不应计算.
我想到从子集中的每个节点运行广度优先搜索,并考虑相应答案的交集.
可以进一步优化吗?
我经历了很多关于SO的帖子,但他们都指向我不明白的kd树,还有其他方法吗?
我正在经历一个面试问题..并提出了需要找到的逻辑:
查找大于(with )
j
的元素的索引,这是最大的.而且我想为数组中的每个索引找到它,或者在额外的空间中找到它a[j]
a[i]
j < i
(i-j)
j
i
O(n)
O(n log n)
O(n)
我到目前为止做了什么:
1)O(n^2)
通过使用简单的for loop
s
2)当我们从左到右扫描元素时,构建平衡的BST,并且i
元素的元素查找索引大于它.但我意识到它可以很容易地O(n)
用于单个元素,因此O(n^2)
对于整个阵列.
我想知道是否可以在O(n)
或中进行O(n log n)
.如果是,请提供一些提示.
编辑:我想我无法解释我的问题.让我清楚地解释一下:我希望arr[j]
左边的arr[i]
这(i-j)
是最大可能的,arr[j]>arr[i]
并且找到所有索引i即for(i=0 to n-1).
编辑2:示例 - {2,3,1,6,0}
for 2 , ans=-1
for 3 , ans=-1
for 1 , ans=2
(ij)==(2-0)
for 6 , ans=-1
for 0 , ans=4
(ij)==(4-0)
假设我有一个包含n
整数的数组。
如何找到大小的子集,k
使得子集中minimum
所有整数对之间的距离为maximized
,我的意思是它们的距离最远。
例如:数组a[]={1,2,6,7,10}
和k=3
,,
subset = {1,6,10}
最小距离4
在10到6之间。
错误的子集:
{1,7,10}
,最小距离是3
{1,2,6}
,最小距离是1
我想出了一个解决方案:
1) 排序数组
2) 选择 a[0] ,现在x
在数组中找到 ceil(a[0]+ ) = Y ....然后 ceil(Y+ x
) 等等k-1
次,第 k 个元素也将是a[n-1]
查找x
:
dp[i,j]
是x
用于从前 i 个元素中选择 j 个元素。
最后我们想要的dp[n][k]
是x
但我在寻找x
.
dp[i,j] = max( min( dp[k,j-1], dp[i]-A[k] ) )
在 k=1 …