前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >听说你在等我的ARTS

听说你在等我的ARTS

作者头像
程序员小跃
发布2019-12-27 15:05:44
2910
发布2019-12-27 15:05:44
举报
文章被收录于专栏:程序员小跃程序员小跃

掐指一算,这应该是祖国妈妈生日之前最后一篇关于ARTS的打卡系列。每次周四,都感觉自己压力好大,准备资料、写算法肯定都得提前做,不然周四当天,我肯定没法完成。

如果把时间调整到非周四,大家还在调整一周的最佳状态,往后推又都在状态下滑期。我太难了,所以,我觉得周四是最佳的碎片化学习时间,你们觉得呢。在你精神最佳的时候,我奉献上如此高质量的小文,贴心吧。

我可以让你提高下算法的思路;让你持续学习英语;让你收获一个优秀的tip;让你看一篇优秀好文……哇哦,想想都开心的不要不要。燥起来!!!

Algorithm LeetCode算法

求众数 (https://leetcode-cn.com/problems/majority-element/)

题目描述:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例1:

代码语言:javascript
复制
输入: [3,2,3]
输出: 3

示例2:

代码语言:javascript
复制
输入: [2,2,1,1,1,2,2]
输出: 2

  1. 哈希算法

看来对于查找,我已经知道了套路的第二步,就是用哈希算法来进行。那么,第一步是什么呢?就是刚做这类查找题,必然会想到的暴力解。

采用哈希算法,是因为之前毕竟也做了好多个,从一开始的没想到,到后来的可能有用,到现在的一看到题目就先去考虑,也算是一大进步。

还是老样子,因为HashMap的Key是不允许重复的。所以,你可以在执行数据查找的时候,利用这个特点来进行。先存入一个数据,value存储出现的次数。遇到重复的,把value值依次加1即可。最后遍历这个HashMap就可以找到想要的答案了。

具体的做法,其实很简单,参考如下即可。就是时间和空间复杂度不友好,都是O(n)。

代码语言:javascript
复制
public static int majorityElement(int[] nums) {

    int result = 0;
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for(int i = 0;i < nums.length; i++) {
        if (map.containsKey(nums[i])) {
            map.put(nums[i], map.get(nums[i]) + 1);
        } else {
            map.put(nums[i], 1);
        }
    }

    int count = nums.length / 2;
    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        if (entry.getValue() > count) {
            result = entry.getKey();
            break;
        }
    }

    return result;
}

2 参考 https://leetcode-cn.com/problems/majority-element/solution/qiu-zhong-shu-by-leetcode-2/

原本以为,这个题只是一个简单的做法,但是小编偷偷去瞄了一眼官方题解,那个激动啊,真的真的很激动。

为啥呢,因为这个题,有多达6种解法,代码最少的解法,你们猜需要多少行代码?给你五秒钟。

5,4,3,2,1 时间到,知悉算法的你知道吗?哈哈,利用先排序,后查询的办法,只要2行代码。

代码语言:javascript
复制
public int majorityElement(int[] nums) {
    Arrays.sort(nums);
    return nums[nums.length/2];
}

做算法真的是一件开心的事情,起先你可能不会,迷茫;然后你开始冥思苦想,绞尽脑汁我到底该如何学习算法;接着你学会了特点,开始照猫画虎;你已经学到该类题目的特色。算法就是一步步提升你的思维,开心不?

Review 阅读并点评至少一篇英文文章

How to Build Good Software (https://www.csc.gov.sg/articles/how-to-build-good-software?utm_source=wanqu.co&utm_campaign=Wanqu+Daily&utm_medium=website)

还是遗留上周的这篇,这个作者的老爸是谁吗?是新加坡总理李显龙。

作者名叫李鸿毅,曾获得公共服务委员会海外优异奖学金,赴美国麻省理工学院攻读经济学,之后在谷歌工作过两年,任产品经理。所以,他查看的角度和大局观,都是优秀的角度,值得我再次品味一番。

具体的分析,上周已经说的差不多了,这周就是温故知新。也是节前的一次偷懒之举吧。接触到了政府级的软件开发角度,还是很赞的噢。希望你也能再看一遍,欢迎和我交流。

Tip 一个技术技巧

这期先暂停一下关于Linux技巧的分享。因为我有先学的东西要拿出来,那就是mongodb的知识。

最近在学习mongodb,肯定需要插入,结果看到有save()和insert()这两种操作,很是纳闷,为什么需要两种方式来表示插入呢?

接下来就来聊聊这两个的异同点,希望能给mongodb学习的同学一点帮助。

都是插入数据

  1. 对于数据库中没有该字段,两者没有区别
  2. 对于数据库中有该字段,insert会报错,save会执行更新操作

若新增的数据中存在主键,insert()会提示错误,而save()则更改原来的内容为新内容

区别

若新增的数据中存在主键,insert()会提示错误,而save()则更改原来的内容为新内容

已存在数据:{_id:11,"username":"user1"},然后继续进行插入操作的话,此时

insert({_id:11,"username":"user2"})

会抛出主键重复的错误提示org.springframework.dao.DuplicateKeyException 并且不保存当前的数据

save({_id:11,"username":"user2"})

user2的内容会覆盖user1

相同点

如果新增的数据中没有主键时,会增加一条记录

已存在数据:{_id:11,"username":"user1"},再次进行插入操作时,

insert({"username":"user2"}) 插入的数据因为没有主键,所以会增加一条数据

save({"username":"user2"}) 增加一条数据,_id 不一样

所以,对于mongodb的插入,你了解了没?关于mongodb,后续应该会有一个小系列,走起。

Share 一篇有观点和思考的技术文章

设计模式走起来。

公众号地址: 设计模式之迭代器与组合模式(三)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑吧攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章
  • Tip 一个技术技巧
  • Share 一篇有观点和思考的技术文章
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档