小编Ase*_*yal的帖子

按字典顺序排序C++的整数数组

我想按字典顺序对大量整数(比如说1个元素)进行排序.

例:

input [] = { 100, 21 , 22 , 99 , 1  , 927 }
sorted[] = { 1  , 100, 21 , 22 , 927, 99  }
Run Code Online (Sandbox Code Playgroud)

我用最简单的方法完成了它:

  • 将所有数字转换为字符串(非常昂贵,因为它将占用大量内存)
  • 使用std:sortstrcmp作为比较功能
  • 将字符串转换回整数

有没有比这更好的方法?

c++ arrays sorting lexicographic

18
推荐指数
4
解决办法
6758
查看次数

从c/c ++中的文件读取最后n行

我看过很多帖子但没找到像我想要的东西.
我输错了:

ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ......  // may be this is EOF character
Run Code Online (Sandbox Code Playgroud)

进入无限循环.

我的算法:

  1. 转到文件末尾.
  2. 将指针的位置减1并逐个字符地读取.
  3. 退出,如果我们找到我们的10行或我们到达文件的开头.
  4. 现在我将扫描整个文件直到EOF并打印它们//未在代码中实现.

码:

#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)

c++ file

12
推荐指数
2
解决办法
2万
查看次数

(数字)&( - 数字)的含义

是什么意思 (number) & (-number)?我搜索了它但却无法找到意义

我想i & (-i)在for循环中使用:

for (i = 0; i <= n; i += i & (-i))
Run Code Online (Sandbox Code Playgroud)

c c++

11
推荐指数
2
解决办法
4255
查看次数

为什么读取数据块比在文件I/O中逐字节读取更快

我注意到,逐字节读取文件比读取文件需要更多时间来读取整个文件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)操作系统的作用是什么?

为什么会如此以及幕后背后到底是什么?

c c++ io file

7
推荐指数
1
解决办法
4096
查看次数

从m个给定节点计算距离小于k的所有节点的最佳方法

n给出了大小的图形,并给出了m其节点大小的子集.查找distance <=k子集的所有节点中的所有节点.

例如 A-> B-> C-> D-> E是图, subset= {A,C}, k= 2.

现在,E与C的距离<= 2,但不是距离A,因此不应计算.

我想到从子集中的每个节点运行广度优先搜索,并考虑相应答案的交集.
可以进一步优化吗?

我经历了很多关于SO的帖子,但他们都指向我不明白的kd树,还有其他方法吗?

algorithm graph

6
推荐指数
1
解决办法
1732
查看次数

最大.大于给定数字的数字的距离

我正在经历一个面试问题..并提出了需要找到的逻辑:

查找大于(with )j的元素的索引,这是最大的.而且我想为数组中的每个索引找到它,或者在额外的空间中找到它a[j]a[i]j < i(i-j)jiO(n)O(n log n)O(n)

我到目前为止做了什么:

1)O(n^2)通过使用简单的for loops

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)

arrays algorithm

5
推荐指数
1
解决办法
1753
查看次数

找到大小为 k 的子集,使得值之间的最小距离最大

假设我有一个包含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 …

c arrays algorithm dynamic-programming

5
推荐指数
1
解决办法
2873
查看次数

标签 统计

c++ ×4

algorithm ×3

arrays ×3

c ×3

file ×2

dynamic-programming ×1

graph ×1

io ×1

lexicographic ×1

sorting ×1