请教算法怎么入门??? 每次鼓起勇气上 leetcode 后,都要怀疑自己的智商。

2016-05-10 08:52:04 +08:00
 ren2881971

比如 这道题(据说很简单)

Given an array and a value, remove all instances of that > value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length. 以下是答案。

class Solution {
public:
    int removeElement(int A[], int n, int elem) {
        int i = 0;
        int j = 0;
        for(i = 0; i < n; i++) {
            if(A[i] == elem) {
                continue;
            }

            A[j] = A[i];
            j++;
        }

        return j;
    }
};

我不明白为什么要加 A[j] = A[i]; 这行代码。 真心请教怎么入门。。

14769 次点击
所在节点    算法
71 条回复
bravecarrot
2016-05-10 13:30:05 +08:00
先弄明白基础的各个数据结构的特点与使用场景。
然后就是看书了,
算法导论,翻过一点,觉得挺好的,但是有时候是伪代码,可能不利于学习,推荐《程序员代码面试指南》每道题都有完整的代码实现,看题,思考,看答案,书合上,自己写,几个回合下来,自己就能刷题了。
我做 leetcode 刚开始就是先看题目答案,理解以后,自己写,不会再循环。
ren2881971
2016-05-10 13:34:58 +08:00
@hitmanx It doesn't matter what you leave beyond the new length 这句很重要~
specita
2016-05-10 14:09:37 +08:00
慢慢来吧,我也最近在做,我是按照 Acceptance 倒序做的,一开始也怀疑智商,多思考就好了
zwhu
2016-05-10 14:45:16 +08:00
『算法 第四版』 挺适合入门的,跟着例子和习题做一遍
loryyang
2016-05-10 14:49:30 +08:00
多练就好了,这种东西也是熟能生巧。记得做题目要踏实,要搞明白里面的每个知识点,每一行代码。
看不懂的可以上论坛提问题,当然如果能够有几个小伙伴一起做,那是更好的
Scicomath
2016-05-10 15:49:45 +08:00
我来说一下我的理解, 题目是想要把等于某个特定值的元素剔除掉, 并且返回新数组的长度.

打个比方, 现在有十个萝卜, 十个坑, 一个萝卜占一个坑. 你现在想要把坏掉的萝卜剔除掉, 留下好的萝卜, 并且要返回好萝卜的个数. 假设现在有两个萝卜是坏掉的. 那么你最后就要把好萝卜都排到前八个坑里面, 然后返回八.

那么要怎么做呢? 按照你给出的答案, 它是这么做的. 首先, 令 i=0, j=0,从前往后依次检查( for(i = 0; i < n; i++)), 如果发现第 i 个萝卜是坏的, 不管它继续看下一个. 如果发现第 i 个是好的, 就把它放到第 j(=0)个坑里(注意就算 j 个坑原来有萝卜可以覆盖掉), 然后 j++. 这样循环下去, 你会发现最后好的肯定都会排到前面, 坏的要么留在后面要么被覆盖了.
Scicomath
2016-05-10 15:55:07 +08:00
@Scicomath 其实就是从前往后数, 发现满足条件的就一个一个往前面填.
其实我觉得还有更好的方法, 就是把要剔除的往数组后面调(其实也不用调, 直接最后面的往前面覆盖就可以了) 因为剔除的一般要少一些, 所以效率应该要高一些
sensui7
2016-05-10 16:09:54 +08:00
他不说不许重亲斤笙朙数组吗? 他就用了 2 个指针, 你说的那行代码其实就是在原数组丄覆盖掉
Lihz
2016-05-10 16:19:54 +08:00
觉得吃力就一小口慢慢吃,一小口花式吃,多 review ,多思考,真不会再搜索
matthewz
2016-05-10 16:25:56 +08:00
推荐先看看算法第四版 看看怎么实现经典算法和数据结构
这题属于 easy
e1eph4nt
2016-05-10 17:15:38 +08:00
@matthewz http://www.v2ex.com/t/276992#reply1 我来卖书了,哈哈哈
sheldoner
2016-05-10 17:17:16 +08:00
@Patiencec 真心请教 什么是算法,什么是数据结构...?还有冒泡排序是属于数据结构还是算法?
sheldoner
2016-05-10 17:24:07 +08:00
@jasonlz 真心请教 什么是算法,什么是数据结构...?还有冒泡排序是属于数据结构还是算法?
Patiencec
2016-05-10 17:36:57 +08:00
@sheldoner 确定不是在黑?都说排序了还问?你这不是编程学得不好而是语文学得不好啊亲。。。排序就是算法啊……数据结构就是字面意思啊,一个结构啊,链表,哈希表,树这些就是结构啊……
sheldoner
2016-05-10 17:40:31 +08:00
@Patiencec 嘿嘿嘿
sheldoner
2016-05-10 17:43:23 +08:00
求一起学 算法低 4 版的小伙伴啊,回复后可详聊....
jasonlz
2016-05-10 18:18:25 +08:00
@sheldoner 如果不想当一辈子的 API 搬运工,好好把计算机基础课程学一遍,把计算机的基本知识体系建立起来,再说去看算法导论,刷 LeetCode 。
mianju
2016-05-10 18:19:45 +08:00
ren2881971
2016-05-10 19:43:04 +08:00
@jasonlz 业务时间 玩下算法而已~ 没必要弄这么大动静吧。
billion
2016-05-10 20:47:35 +08:00
这道题如果用 python 做,两行代码就搞定。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/277511

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX