V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  pwrliang  ›  全部回复第 18 页 / 共 19 页
回复总数  380
1 ... 10  11  12  13  14  15  16  17  18  19  
2018-04-20 08:32:39 +08:00
回复了 kavana 创建的主题 Visual Studio Code 还有人去 VB 开发论坛吗?
Vbgood?初中常逛,常看那个底层编程版块😂
2018-04-15 10:33:58 +08:00
回复了 Trumeet 创建的主题 全球工单系统 发现很多 ROM 都存在一个严重安全隐患
Pixel2 安装失败
2018-04-12 13:46:28 +08:00
回复了 tuzhenyu 创建的主题 程序员 关于 Java 多线程上下文切换的疑问
每个线程应该是有独立的 PC,但是寄存器应该是共享,所以上下文应该包括通用寄存器?还有,不知道 jvm 线程实现是用户级还是内核级别的?求大佬解答
2018-04-12 00:07:30 +08:00
回复了 callmedachang 创建的主题 Java 一道 Java 题。。。。。。
好题啊,我只知道 Class 在加载的时候会初始化 static 成员,但是不知道会按声明顺序初始化的。调换初始化顺序就变成了 10,10.
public static int i = 10;
public static demo instance = new demo(20);
2018-04-10 03:03:17 +08:00
回复了 pwrliang 创建的主题 Android 现在入手 Pixel2 合适否?
@xbtmyz 所以我用入了个 MDR 1000x😂😂😂
mark, 谢楼主
2018-04-05 23:02:10 +08:00
回复了 xuyu 创建的主题 问与答 有没有什么耳机可以推荐的?耳机丢了一星期我快坐不住了。
IE80,没用过但是听说挺古典交响适合。目前在用 GR07 和 mdr 1000x
能发一下面经吗😁😁😁
2018-04-03 00:39:48 +08:00
回复了 XinLake 创建的主题 Java 如何优化这段代码更加优雅
javafx.util.Pair<Long, Long>
2018-04-01 04:25:20 +08:00
回复了 jessynt 创建的主题 天黑以后 20180401 午夜俱乐部
蛤?
2018-03-30 21:22:49 +08:00
回复了 airyland 创建的主题 全球工单系统 今日头条(员工)抓取 Github 用户群发面试邀约邮件
同收到了,一个是头条 Python 一个阿里 Java 岗
2018-03-26 11:14:10 +08:00
回复了 gbin 创建的主题 算法 2018026 今日算法
@lhx2008 您好,那个 sorted 2 sum 我做出来了,您能说下这个 n-sum 问题怎么解吗,谢谢?
2018-03-25 09:41:55 +08:00
回复了 gbin 创建的主题 算法 2080324 今日算法
更新一下,上面的 top k 算法我摘自 geekforgeek 的,其实我并没有看懂。下面的找 top k 算法来自《算法 第四版》,这个代码更易读懂,运行时间也比上面的代码更短。

两个数组拼凑需要 O(m+n),如果是偶数长度,查找两次 top k 需要 O(2*(m+n)),奇数长度 O(m+n),因此时间复杂度在 O(2*(m+n))~O(3*(m+n))之间。
当然另一种方法是用两个指针指向两个数组当前元素,依次将当前最小的元素写入第三个数组,即合并两个有序数组生成的数组也是有序的。然后再找中位数。

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] cpy = new int[nums1.length + nums2.length];
System.arraycopy(nums1, 0, cpy, 0, nums1.length);
System.arraycopy(nums2, 0, cpy, nums1.length, nums2.length);
return findForOne(cpy);
}

double findForOne(int[] nums) {
if (nums.length % 2 == 0) {
int k1 = getKth(nums, nums.length / 2 - 1);
int k2 = getKth(nums, nums.length / 2);
return (k1 + k2) / 2.0;
}
return getKth(nums, nums.length / 2);
}

//2 1 3 4 5
int getKth(int[] nums, int k) {
int lo = 0, hi = nums.length - 1;
while (lo < hi) {
int j = partition(nums, lo, hi);
if (j < k)
lo = j + 1;
else if (j > k)
hi = j - 1;
else {
return nums[k];
}
}
return nums[k];
}

int partition(int[] nums, int lo, int hi) {
int pivot = nums[lo];
int i = lo, j = hi + 1;

while (true) {
while (nums[++i] < pivot)
if (i == hi)
break;
while (nums[--j] > pivot)
if (j == lo)
break;
if (i >= j) break;
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
int tmp = nums[lo];
nums[lo] = nums[j];
nums[j] = tmp;
return j;
}
2018-03-25 05:56:32 +08:00
回复了 gbin 创建的主题 算法 2080324 今日算法
我来实现一下一楼我说的方法吧,首先解决一个数组找中位数的问题
对于 len % 2 == 0,我们求出数组第 len / 2 大的数和 len / 2 + 1 大的数,再求和除以 2 就是中位数,对于 len % 2 == 1 的情况,直接找 len / 2 + 1 大的数就是中位数。
至于怎么求第 k 大的数( top 问题),可以用快排的分区函数来实现。https://www.geeksforgeeks.org/kth-smallestlargest-element-unsorted-array/



以下代码通过了 leetcode judege:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] cpy = new int[nums1.length + nums2.length];
System.arraycopy(nums1, 0, cpy, 0, nums1.length);
System.arraycopy(nums2, 0, cpy, nums1.length, nums2.length);
return findForOne(cpy);
}

double findForOne(int[] nums) {
if (nums.length % 2 == 0) {
int k1 = getKth(nums, 0, nums.length - 1, nums.length / 2);
int k2 = getKth(nums, 0, nums.length - 1, nums.length / 2 + 1);
return (k1 + k2) / 2.0;
}
return getKth(nums, 0, nums.length - 1, nums.length / 2 + 1);
}

int getKth(int[] nums, int lo, int hi, int k) {

int ans = Integer.MAX_VALUE;
if (k > 0 && k <= hi - lo + 1) {
int pos = partition(nums, lo, hi);
int len = pos - lo;

if (len == k - 1)
ans = nums[pos];
else if (k - 1 < len)
ans = getKth(nums, lo, pos - 1, k);
else
ans = getKth(nums, pos + 1, hi, k - len - 1);
}
return ans;
}

int partition(int arr[], int l, int r) {
int x = arr[r], i = l;
for (int j = l; j <= r - 1; j++) {
if (arr[j] <= x) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
}
}
int tmp = arr[i];
arr[i] = arr[r];
arr[r] = tmp;
return i;
}
}
2018-03-24 09:11:46 +08:00
回复了 risent 创建的主题 Python Python 中 Hello World 的 10 种写法
我觉得挺好的,收藏了,尤其是 python 调用 c 的代码
2018-03-24 08:54:50 +08:00
回复了 gbin 创建的主题 算法 2080324 今日算法
把两个有序数组接起来,然后用快排的分区函数的找中位数?楼下继续…
2018-03-23 06:41:06 +08:00
回复了 hdjs5264 创建的主题 Steam HB 免費領取 F1 2015 持續兩天
感谢,喜+1
2018-03-18 07:41:53 +08:00
回复了 LvMax 创建的主题 程序员 Windows Server 2012 R2 一直无法连接 l2tp v̵͝p̀͝ǹ
快使用 softether,非常方便
2018-03-16 02:19:38 +08:00
回复了 razios 创建的主题 问与答 眼镜老是容易下滑有什么好点的办法?
换成黑框的试试
1 ... 10  11  12  13  14  15  16  17  18  19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 12:25 · PVG 20:25 · LAX 04:25 · JFK 07:25
Developed with CodeLauncher
♥ Do have faith in what you're doing.