p*****2 发帖数: 21240 | 1 最近在看leetcode的blogs,很多算法很巧妙,但是用到了C/C++的指针和引用的特性。
Java里边没有呀。有没有人总结过用Java怎么应用这些巧妙算法?定义class变量吗? |
t**********h 发帖数: 2273 | 2 对,class 变量在java中很常见,因为class中,可以把class 变量定义为private,所
以封装的还是很好的,不用怕。c的话,是不是叫做global变量,好像不推荐这么弄
【在 p*****2 的大作中提到】 : 最近在看leetcode的blogs,很多算法很巧妙,但是用到了C/C++的指针和引用的特性。 : Java里边没有呀。有没有人总结过用Java怎么应用这些巧妙算法?定义class变量吗?
|
p*****2 发帖数: 21240 | 3
主要是C可以传指针,所以一个函数相当于可以返回很多的值。Java没有指针,只能返
回一个值。但是如果定义一个class的话,code很不漂亮。所以定义class变量可以出同
样的效果。但是一般都是写一个函数,定义个class也不漂亮。那就只定义全局变量?
这样code可以简洁。不知道这么做面试官怎么想。上次F死活不让我定义类变量。
【在 t**********h 的大作中提到】 : 对,class 变量在java中很常见,因为class中,可以把class 变量定义为private,所 : 以封装的还是很好的,不用怕。c的话,是不是叫做global变量,好像不推荐这么弄
|
p*****2 发帖数: 21240 | |
t**********h 发帖数: 2273 | 5 我擦,你连f都面过了啊?牛逼
【在 p*****2 的大作中提到】 : 算了。就定义类变量了。没别的好法子。
|
h*c 发帖数: 1859 | 6 难倒不是
Java里面的都是引用么?
【在 p*****2 的大作中提到】 : 最近在看leetcode的blogs,很多算法很巧妙,但是用到了C/C++的指针和引用的特性。 : Java里边没有呀。有没有人总结过用Java怎么应用这些巧妙算法?定义class变量吗?
|
w**z 发帖数: 8232 | 7 引用英文怎么说?中文术语不太看得懂。
【在 h*c 的大作中提到】 : 难倒不是 : Java里面的都是引用么?
|
h*c 发帖数: 1859 | 8 reference
【在 w**z 的大作中提到】 : 引用英文怎么说?中文术语不太看得懂。
|
w**z 发帖数: 8232 | 9 java makes a copy of the reference, then pass that to the method call.
【在 h*c 的大作中提到】 : reference
|
t**********h 发帖数: 2273 | 10 对,copy of reference,正解
【在 w**z 的大作中提到】 : java makes a copy of the reference, then pass that to the method call.
|
|
|
h*c 发帖数: 1859 | 11 那不还是reference么?
你C/C++里面的指针也还是copy
一样的.
【在 w**z 的大作中提到】 : java makes a copy of the reference, then pass that to the method call.
|
w**z 发帖数: 8232 | 12 好久没用c++,现在一见*&就晕菜。
【在 h*c 的大作中提到】 : 那不还是reference么? : 你C/C++里面的指针也还是copy : 一样的.
|
d**e 发帖数: 6098 | 13 对primitive java没引用可用。
上一次做一题binary tree,用递归,但那层数表示把我头都想大,定义成一个class
level的static variable又不太好。
【在 h*c 的大作中提到】 : 那不还是reference么? : 你C/C++里面的指针也还是copy : 一样的.
|
y**********u 发帖数: 6366 | 14 嗯,这就是java的Pass by value。。。reference value
【在 w**z 的大作中提到】 : java makes a copy of the reference, then pass that to the method call.
|
y**********u 发帖数: 6366 | 15 C++里面的reference就真是reference了
【在 h*c 的大作中提到】 : 那不还是reference么? : 你C/C++里面的指针也还是copy : 一样的.
|
y**********u 发帖数: 6366 | 16 如果有多个形参要改变的话,直接封装在一个HashMap里头当参数传递
更好
Enum是类型
【在 d**e 的大作中提到】 : 对primitive java没引用可用。 : 上一次做一题binary tree,用递归,但那层数表示把我头都想大,定义成一个class : level的static variable又不太好。
|
p*****2 发帖数: 21240 | 17
给个简单的例子。我Java不熟。Enum从来没用过呀。
【在 y**********u 的大作中提到】 : 如果有多个形参要改变的话,直接封装在一个HashMap里头当参数传递 : 更好 : Enum是类型
|
p*****2 发帖数: 21240 | 18 刚用类变量解了O(n)的linkedlist to BST的题。 面试这么写行吗?感觉这是我能想到
的最简洁的写法了。
ListNode node;
Node listToBST(ListNode head)
{
node = head;
int count = 0;
while (head != null)
{
head = head.next;
count++;
}
return listToBST(0, count - 1);
}
Node listToBST(int start, int end)
{
if (start > end)
return null;
int mid = start + (end - start) / 2;
Node left = listToBST(start, mid - 1);
Node parent = new Node(node.val);
node = node.next;
parent.left = left;
parent.right = listToBST(mid + 1, end);
return parent;
} |
y**********u 发帖数: 6366 | 19 Enum也得自己定义啊
如果你不介意比较难看的话,随便把你要改的参数放入一个container里头就可以了,没
必要重新写类
传递
【在 p*****2 的大作中提到】 : 刚用类变量解了O(n)的linkedlist to BST的题。 面试这么写行吗?感觉这是我能想到 : 的最简洁的写法了。 : ListNode node; : Node listToBST(ListNode head) : { : node = head; : int count = 0; : while (head != null) : { : head = head.next;
|
p*****2 发帖数: 21240 | 20
container是啥东西?
【在 y**********u 的大作中提到】 : Enum也得自己定义啊 : 如果你不介意比较难看的话,随便把你要改的参数放入一个container里头就可以了,没 : 必要重新写类 : : 传递
|
|
|
y**********u 发帖数: 6366 | 21 Collections + Map
了,没
【在 p*****2 的大作中提到】 : : container是啥东西?
|
h****e 发帖数: 928 | 22 我觉得用Java面试的一个很大的好处是不用考虑释放内存。
例如LeetCode上的一些Remove elements from List的题目,
我试着用C++和Java做,Java只要更新next之类的值就可以
了,C++还要用delete释放那些移去的元素的内容,挺繁琐的。 |
g*********e 发帖数: 14401 | 23 据说java是民工语言?上手太容易,不能造成entry barrier? |
h****e 发帖数: 928 | 24 Java入门容易,精通也难吧。你看apache.org下的projects,
基本上都是用Java的,但是那应该不是一般的码工能写得出来
的吧。
当然据说有些老印在印度参加一些Hadoop的开发工作,都可以
号称是杰出人才,只有本科学位都在办EB1。 |
Z*****Z 发帖数: 723 | 25 除了全局变量还有一个办法模拟C里面的指针
定义一个helper类,比如
class ListNodeHelper{
ListNode ref;
}
把需要在C里面传指针在Java里面只能传引用的的痛苦的地方用这个类的变量代替。
另外,还可以考虑定义一个长度为1的数组。。。
其实本质上都是语文老师说的,放到容器里面。
【在 p*****2 的大作中提到】 : 刚用类变量解了O(n)的linkedlist to BST的题。 面试这么写行吗?感觉这是我能想到 : 的最简洁的写法了。 : ListNode node; : Node listToBST(ListNode head) : { : node = head; : int count = 0; : while (head != null) : { : head = head.next;
|
X*K 发帖数: 87 | 26 Java里虽然不用释放内存,但是也应该把被删掉的那些
elemen的内容还有next置空,不然会影响gc。
【在 h****e 的大作中提到】 : 我觉得用Java面试的一个很大的好处是不用考虑释放内存。 : 例如LeetCode上的一些Remove elements from List的题目, : 我试着用C++和Java做,Java只要更新next之类的值就可以 : 了,C++还要用delete释放那些移去的元素的内容,挺繁琐的。
|
i***e 发帖数: 452 | 27 请问大牛在哪里可以看leetcode的blog? 谢谢
【在 p*****2 的大作中提到】 : : container是啥东西?
|
p*****2 发帖数: 21240 | 28
leetcode.com呀
【在 i***e 的大作中提到】 : 请问大牛在哪里可以看leetcode的blog? 谢谢
|
i***e 发帖数: 452 | 29 谢谢!
【在 p*****2 的大作中提到】 : : leetcode.com呀
|
w**z 发帖数: 8232 | 30 你把node 传进method call 不可以吗?
Node listToBST(ListNode node, int start, int end)
{
if (start > end)
return null;
int mid = start + (end - start) / 2;
Node left = listToBST(node, start, mid - 1);
Node parent = new Node(node.val);
node = node.next;
parent.left = left;
parent.right = listToBST(node, mid + 1, end);
return parent
}
【在 p*****2 的大作中提到】 : 刚用类变量解了O(n)的linkedlist to BST的题。 面试这么写行吗?感觉这是我能想到 : 的最简洁的写法了。 : ListNode node; : Node listToBST(ListNode head) : { : node = head; : int count = 0; : while (head != null) : { : head = head.next;
|
|
|
p*****2 发帖数: 21240 | 31
不行。这就是为什么我要用类变量
【在 w**z 的大作中提到】 : 你把node 传进method call 不可以吗? : Node listToBST(ListNode node, int start, int end) : { : if (start > end) : return null; : int mid = start + (end - start) / 2; : Node left = listToBST(node, start, mid - 1); : Node parent = new Node(node.val); : node = node.next; : parent.left = left;
|
w**z 发帖数: 8232 | 32 对哦,好像只能你那么弄才work了。
leecode的全是用C++写的,我的脑袋已经不适应指针了,看着真费劲。
【在 p*****2 的大作中提到】 : : 不行。这就是为什么我要用类变量
|