ARTS打卡第三周

博客包含多方面内容。算法部分讲解Leetcode 80题,去除排序数组中重复超两次的元素;Review介绍PWA应用将冲击应用市场;Tip给出Linux查看端口占用及Maven查看依赖的命令;Share分享编程的7点重要经验,如提升能力、不怕写bug等。

Algorithm:Leetcode: 80. Remove Duplicates from Sorted Array II

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
Example 1:
Given nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.

It doesn’t matter what you leave beyond the returned length.
Example 2:
Given nums = [0,0,1,1,1,1,2,3,3],

Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively.

It doesn’t matter what values are set beyond the returned length.

常规思路:
做完简单版本的题目 26. Remove Duplicates from Sorted Array ,很自然想到用一个变量记录相同数字是否出现了两次,于是就有了下面的版本。

class Solution {
    public int removeDuplicates(int[] nums) {
         if (nums.length < 2) {
            return nums.length;
        }
        boolean repeatTwice = false;
        int i=0;
        for (int j=1; j<nums.length; j++) {
            if (nums[i] != nums[j]) {
                nums[++i] = nums[j];
                repeatTwice = false;
            } else if (!repeatTwice){
                nums[++i] = nums[j];
                repeatTwice = true;
            }
        }
                return i+1;
    }
}

Review: The End of App Stores Is Rapidly Approaching

这篇文章主要讲述了一种新的应用形态PWA(Progressive Web Application),这是一种基于浏览器的web应用,但是能够提供和原生APP差不多的使用体验。PWA将会影响到Google Store和Apple Store,因为后者主要通过售卖APP盈利,PWA使得人们能够不通过APP Store就能使用各种APP。

用户可以通过浏览器应用市场(Browser Market)中的按钮安装这种应用,它在一个独立的浏览器窗口中呈现,也会创建桌面快捷方式,界面看上去和一个桌面应用差不多。

谷歌公司已经在Android设备上尝试PWA应用有一段时间了,但是苹果公司对于在它的移动设备上实施PWA标准一直不太积极。总体来看,应用市场的双寡头(谷歌和苹果)都提倡在各自平台使用原生应用,因为这是它们利润的来源之一。

有调查显示,PWA在开发者中越来越流行。微软在2018年末声明允许开发者通过其APP Store展示PWA应用,现在它还计划在其APP Store中添加网络上发现的PWA应用。谷歌也计划在2019年底做成类似的事情。

如果苹果不支持PWA的发展,其吸引力可能会大大减弱。但苹果这样做可能会导致反垄断调查和巨额罚款。

作者认为现在人们越来越多的使用浏览器了,使用浏览器作为应用平台是大势所趋。巨头们应该走出封闭,拥抱开放的互联网。

drag one’s heel (因不情愿而)拖拖拉拉地做

Tip:

Linux下查看端口占用情况的命令:lsof -i:8080
Maven查看依赖情况的命令:mvn dependency:tree
Maven分析依赖的命令:mvn dependency:analyze

Share:

7 important lessons about programming that I’ve learned at 17

  1. 没有谁能无所不知
    你需要努力做到:
    1.1 提升解决问题的能力
    1.2 提升团队协作和交流的能力
    1.3 提升对编程概念和编程语言的理解
    1.4 创建一些很酷的项目来展示你的工作
    1.5 专注于写出高效简洁的代码

  2. 不要怕写的代码有bug
    写出bug才能学到东西,不写bug表示你对这一套已经很熟悉了,没有什么可提升的了。

  3. 正规的计算机教育不是必须的
    有机会参加正规计算机课程或者编程夏令营,就去吧,但这不是必须的。如何高效学习才是最重要的。

  4. 利用搜索引擎是一个合法技能
    学会一些小技巧来提升搜索资料的能力。

  5. 三思而后写代码
    第一个跳进头脑的解决方案往往不是最好的。写代码前最好想清楚,可以节省重构和解决bug的时间。

  6. 小心对待辅导课程
    编程课程可以很快帮助你上手,但是会知其然不知其所以然。最好的学习方式是创建好自己的工程,少copy一些代码,多自己写代码,多看看官方解释。就像拼图一样,拼出一个可以工作的程序。你能从中学到很多。

  7. 制表符比空格好
    写代码时,使用制表符比一次次敲击空格要好(在某些语言比如python中,空格是语法的一种,使用制表符时就要小心了)

### ARTS打卡 Java 学习或项目进展 #### 一、Algorithm 算法练习 在算法方面,最近研究了回文验证问题中的双指针方法。通过实现 `validPalindrome` 函数来判断给定字符串是否可以通过删除最多一个字符形成回文串[^2]。 ```cpp class Solution { public: bool validPalindrome(string s) { int i = 0; int j = s.size() - 1; int diffCount = 0; while (i < j) { if (s[i] == s[j]) { ++i; --j; } else { if (diffCount > 0) return false; // 尝试移除左边或右边的一个字符并继续比较剩余部分 string sub1 = s.substr(i + 1, j - i); string sub2 = s.substr(i, j - i); return is_palindrome(sub1) || is_palindrome(sub2); } } return true; // 辅助函数用于检测子串是否为回文 auto is_palindrome = [](const std::string& str){ int l = 0, r = str.length() - 1; while(l<r && str[l]==str[r]){ ++l;--r; } return l>=r; }; } }; ``` 此版本改进了原始逻辑,在遇到不匹配的情况时不再直接修改原字符串而是创建两个新的子串分别测试其合法性,从而提高了代码可读性和效率。 #### Review 技术文章阅读心得 关于数据库操作的学习笔记中提到 MySQL 支持四种不同的事务隔离级别:未提交读(Read Uncommitted),已提交读(Read Committed),可重复读(Repeatable Read),序列化(Serializable)[^1]。每种级别的特性决定了并发环境下数据的一致性程度以及性能表现之间的权衡关系。 另外还探讨了两种常见的锁机制——悲观锁(Pessimistic Locking) 和乐观锁(Optimistic Locking) 的原理及其适用场景: - **悲观锁** 假设冲突不可避免,因此总是先锁定资源再执行更新动作; - **乐观锁** 则认为大多数情况下不会发生竞争,仅当实际发生写入时才检查是否有其他更改影响到目标对象。 这两种策略各有优劣,具体选择取决于应用的具体需求和环境特点。 #### Tip 技巧总结 对于上述提及的内容,建议开发者们理解各自系统的默认配置,并根据业务逻辑调整合适的参数设置;同时也要熟悉如何利用编程语言提供的工具去处理并发控制问题,比如 Java 中可以借助框架如 Spring 提供的支持简化分布式事务管理过程。 #### Share 经验交流 分享过程中发现很多同学对多线程下的共享变量可见性和原子性的概念存在误解。实际上,Java 内存模型规定了 volatile 关键字能保证变量的即时可见性但不具备原子性保障,而 synchronized 或者 ReentrantLock 可以提供更强大的同步功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值