通过添加到robots.txt
以下行来关闭索引中的几个 URL
Disallow: /warranty/
Disallow: /payment/
Disallow: /patent/
但尖叫青蛙和 Yandex 网站管理员仍然声称这些页面丢失了description
。请告诉我,哪里出了问题。
通过添加到robots.txt
以下行来关闭索引中的几个 URL
Disallow: /warranty/
Disallow: /payment/
Disallow: /patent/
但尖叫青蛙和 Yandex 网站管理员仍然声称这些页面丢失了description
。请告诉我,哪里出了问题。
代码执行没有错误,但随着数据量的增加,速度降低,解决方案在某些时候不通过条件。帮助优化代码。也许还有另一种计算公式的选择。
谢谢你。
import numpy as np
ar = np.loadtxt('input.txt', skiprows=1)
ar.astype(dtype=np.float16)
ar = ar[ar[:, 0].argsort()]
s = 0
p = 0
un = np.unique(ar[:, 0])
for _ in un:
for row in ar[ar[:, 0] == _][:, 1]:
s += (
ar[np.where((ar[:, 0] > _)
& ((ar[:, 1] > row)))].shape[0] +
ar[np.where((ar[:, 0] > _)
& ((ar[:, 1] == row)))].shape[0] / 2
)
p += (
ar[np.where(ar[:, 0] > _)].shape[0]
)
print(round(s / p, 7))
我没有对代码进行太多优化,但我无法进一步减少时间。
import numpy as np
ar = np.loadtxt('input.txt', skiprows=1)
ar = ar[ar[:, 0].argsort()]
s = 0
p = 0
un = np.unique(ar[:, 0])
un_1, duplicate_count = np.unique(ar, axis=0, return_counts=True)
pivot_table = np.concatenate((un_1, (np.array([duplicate_count])).T), axis=1)
for _ in un:
for row in pivot_table[pivot_table[:, 0] == _][:, 1]:
s += (
(
np.sum(pivot_table[np.where((pivot_table[:, 0] > _)
& (pivot_table[:, 1] > row))][:, 2])
+ np.sum(pivot_table[np.where((pivot_table[:, 0] > _)
& (pivot_table[:, 1] == row))][:, 2])
/ 2
)
* pivot_table[np.where((pivot_table[:, 0] == _) & (pivot_table[:, 1] == row))][:, 2]
)
p += (
np.sum(pivot_table[np.where(pivot_table[:, 0] > _)][:, 2])
* pivot_table[np.where((pivot_table[:, 0] == _) & (pivot_table[:, 1] == row))][:, 2]
)
print(round(float(s / p), 7))
使用 leetcode 完成任务。任务文本:
给定两个大小分别为 m 和 n 的排序数组 nums1 和 nums2,返回两个排序数组的中位数。总体运行时复杂度应为 O(log (m+n))。
我已经解决了这个问题,但我想实现最快的解决方案。目前,我已经为自己160 ms
和39.2 MB
. 如何使代码在速度和内存消耗方面更加优化?
public class Solution
{
public double FindMedianSortedArrays(int[] nums1, int[] nums2)
{
nums1 = Concat(nums1, nums2);
SortArray(nums1, 0, nums1.Length - 1);
if (nums1.Length % 2 == 0)
{
double a = nums1[nums1.Length / 2 - 1];
double b = nums1[nums1.Length / 2];
double result = (a + b) / 2;
return result;
}
return Convert.ToDouble(nums1[nums1.Length / 2]);
}
private int[] Concat(int[] x, int[] y)
{
int oldLen = x.Length;
Array.Resize(ref x, x.Length + y.Length);
Array.Copy(y, 0, x, oldLen, y.Length);
return x;
}
private void SortArray(int[] array, int leftIndex, int rightIndex)
{
var i = leftIndex;
var j = rightIndex;
var pivot = array[leftIndex];
while (i <= j)
{
while (array[i] < pivot)
{
i++;
}
while (array[j] > pivot)
{
j--;
}
if (i <= j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
if (leftIndex < j)
SortArray(array, leftIndex, j);
if (i < rightIndex)
SortArray(array, i, rightIndex);
}
}
我有两个代码解决了同样的问题。但由于某种原因,一个比另一个快。我有一个问题,因为一个网格的速度是多少。
慢程序代码
#include <iostream>
#include <vector>
using namespace std;
int closeNumber(vector<int> N, int number, int size) {
int l = 0;
int r = size - 1;
while (r - l > 1) {
int mid = (l + r) / 2;
if (number > N[mid]) {
l = mid;
}
else {
r = mid;
}
}
if (N[r] - number < number - N[l]) {
return N[r];
}
return N[l];
}
int main()
{
int n, k;
cin >> n >> k;
vector<int> N(n);
vector<int> K(k);
for (int i = 0; i < n; i++) cin >> N[i];
int number;
for (int i = 0; i < k; i++) {
cin >> number;
cout << closeNumber(N, number, n) << endl;
}
return 0;
}
快速程序代码
#include <iostream>
using namespace std;
int main()
{
int n, k, x;
cin >> n >> k;
int arr[100000];
for (int i = 0; i < n; i++)
cin >> arr[i];
for (int h = 0; h < k; h++)
{
cin >> x;
int L = 0;
int R = n - 1;
while (R - L > 1)
{
int M = (R + L) / 2;
if (arr[M] < x)
L = M;
else
R = M;
}
if (x - arr[L] <= arr[R] - x) cout << arr[L] << endl;
else cout << arr[R] << endl;
}
return 0;
}
给定任务:
为了检查她的学生如何数数,Maria Ivanovna 每年都会在家里给他们布置相同的任务 - 对于给定的自然 A,找到最小自然 N 使得 N 的 N 次方(N 乘以自身 N 次)是能被 A 整除。有必要写一个程序来解决这个问题
1 ≤ A ≤ 10^9
我写了这段代码:
#include <iostream>
#include <vector>
#include <cmath>
#include <unordered_set>
using namespace std;
vector<int> decomp (int n)
{
vector<int> ans (0);
int d = 2;
while (d * d <= n)
{
if (n % d == 0)
{
ans.push_back(d);
n /= d;
}
else
d += 1;
}
if (n > 1)
ans.push_back(n);
return ans;
}
int main()
{
int x; cin >> x;
if (x == 1)
cout << 1;
else
{
vector<int> tmp = decomp(x);
unordered_set<int> s;
for (int el: tmp)
s.insert(el);
vector<int> a (0);
for (int el: s)
a.push_back(el);
int y = 1;
for (int i = 0; i < a.size(); i++)
y *= a[i];
if (y >= 29)
cout << y;
else
{
int k = 1; int n = k * y;
while ((int)pow(n, n) % x != 0)
{
n = k * y;
k += 1;
}
cout << n;
}
}
}
但是它运行得太慢了。请帮助我,我该如何优化它?