前言

  考研结束半个月了,自己也简单休整了一波,估了一下分,应该能进复试,但还是感觉不够托底。不管怎样,要把代码能力和八股捡起来了,正好看到卡哥有这个算法训练营,遂果断参加,为机试和日后求职打下一个基础。

  我之前断断续续地刷过一些LeetCode,但是不成体系,数量也少得可怜,才区区50+,在寻找暑期实习的过程中吃够了苦头,希望通过这次训练营得到一个长足的提升,养成自己写博客的习惯,慢慢提升自己的博客水准。

之前的LeetCode刷题分析

LeetCode

704 二分查找

  二分是一个很基础的思维和技能,但是在动手敲代码时还是有些错误和值得完善的地方。我的初步思路是po出代码,卡壳&忽略等问题采用多行注释标注,(这也是我今后回顾的重点),并针对使用的数据结构和题目特征进行总结。

数据结构知识

  本题主要采用了数组这一在内存连续存储的数据结构,这里对java中的数组和常用“工具”进行介绍。数组的删除需要移动元素,这一点要尤其注意。

//一维数组初始化
type[] arrayName = new type[size];
type[] arrayName = new type[]{值 1,值 2,值 3,值 4,• • •,值 n};
type[] arrayName = {值 1,值 2,值 3,...,值 n}; int[] number = {1,2,3,5,8};
//遍历一
for (int i=0;i<number.length;i++) {
System.out.println("第"+(i+1)+"个元素的值是:"+number[i]);
}
//遍历二
for(int val:number) {
System.out.print("元素的值依次是:"+val+"\t");
} //二维数组初始化
type[][] arrayName = new type[size1][size2]; // 给定空间,在赋值
type[][] arrayName = new type[size][]; // 数组第二维长度为空,可变化
type[][] arrayName = new type[][]{{值 1,值 2,值 3,…,值 n},{值 1,值 2,值 3,…,值 n}}; // 在定义时初始化 double[][] nums = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };
//遍历一
for (int i = 0; i < nums.length; i++) { // 遍历行
for (int j = 0; j < nums[i].length; j++) {
System.out.println("nums[" + i + "][" + j + "]=" + nums[i][j]);
}
}
//遍历二
for (double[] row : nums) {
for (double value : row) {
System.out.println(value);
}
}
/*
* 注意 在二维数组中,直接使用 length 属性获取的是数组的行数,
* 在指定的索引后加上 length(如 array[0].length)表示的是该行拥有多少个元素,即列数
*/

  Arrays & Collections 工具类

int[] array;
int[][] twoDArray; Arrays.toString(array);
// 数组到字符串
Arrays.asList(array);
// array到list
Arrays.sort(array);
// 升序排列数组
Arrays.sort(twoDArray,(v1,v2) -> v1[0] - v2[0]);
// v1 v2是每一行的元素 每一行升序排列
Arrays.binarySearch(array, 3);
// 二分查找
Arrays.fill(array, val);
// 填充数据
Arrays.copyOfRange(array,from,to);
// [from,to)
Arrays.copyOf(array, 8);
// 获取新数组 少补多截
Arrays.equals(array1,array2);
// @Return boolean String[] in = new String[]{ "1", "a"};
List<String> out = new ArrayList<>(in.length);
// 创建列表,并指定长度,避免可能产生的扩容
Collections.addAll(out, in);
// 这样新建的集合out可以进行add等操作

  Java语言有很多API可以使用,是好事也是坏事,平时多记多用,减轻笔试压力,拓宽做题思路。

Code

class Solution {
public int search(int[] nums, int target) {
/* 未优先考虑的
* 避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算
if (target < nums[0] || target > nums[nums.length - 1]) {
return -1;
}
*/
int left = 0, right = nums.length - 1;
while(left <= right){
int mid = (left+right)/2;
int val = nums[mid];
if(val == target){
return mid;
}else if(val < target){
left = mid+1;
}else{
right = mid-1;
}
}
return -1;
}
}

 27 移除元素

code

  这题没什么值得说的,基本的数组移动

class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
int ans = len;
for(int i = 0; i<len;){
if(nums[i] == val){
for(int j=i; j<len-1; j++){
nums[j] = nums[j+1];
}
len--;
ans--;
continue;
}else{
i++;
}
}
return ans;
}
}

总结:

写代码是件费脑子的事情,要是能找到银弹可就太好了,可目前还是只能一点一点去积累经验,形成自己的刷题模式,不断完善。下面是我总结的一些通用的刷题考虑方向,后续会不断完善,欢迎评论区各位码友分享自己的经验。

  1. 优先考虑特殊情况
  2. 动笔画图,推演执行过程
  3. 打日志

欢迎指正!

代码随想录算法训练营day01 | leetcode 704/27的更多相关文章

  1. 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II

    [算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...

  2. 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素

    [算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...

  3. 【算法训练营day7】LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和

    [算法训练营day7]LeetCode454. 四数相加II LeetCode383. 赎金信 LeetCode15. 三数之和 LeetCode18. 四数之和 LeetCode454. 四数相加I ...

  4. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  5. 算法进阶之Leetcode刷题记录

    目录 引言 题目 1.两数之和 题目 解题笔记 7.反转整数 题目 解题笔记 9.回文数 题目 解题笔记 13.罗马数字转整数 题目 解题笔记 14.最长公共前缀 题目 解题笔记 20.有效的括号 题 ...

  6. 【算法题 14 LeetCode 147 链表的插入排序】

    算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...

  7. 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

    第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...

  8. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

    第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...

  9. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  10. 程序员进阶之算法练习:LeetCode专场

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由落影发表 前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题: 题目1是基于链表的大数加法,既考察基本 ...

随机推荐

  1. jquery操作class

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. MetaTown:一个可以自己构建数字资产的平台

    摘要:华为云Solution as Code重磅推出<基于MetaTown构建数字资产平台>解决方案. 本文分享自华为云社区<基于MetaTown构建数字资产平台>,作者: 阿 ...

  3. 直接快速下载NLTK数据

    直接快速下载NLTK数据 直接下载NLTK的数据速度很慢,这里提供NLTK数据集,直接下载即可.或者选择下列百度云下载: 链接:https://pan.baidu.com/s/17ZgkoQeMosW ...

  4. ORM数据增删改查 django请求生命周期 django路由层 反向解析

    目录 可视化界面之数据增删改查 补充 1.建表 2.数据展示功能 3.数据添加功能 4.数据编辑功能 5.数据删除功能 django请求生命周期流程图 crsf wsgirel 与 uwsgi ngi ...

  5. Django三大主流Web框架(django版本安装-项目创建-应用创建-django三板斧)

    目录 一:python三大主流web框架 1.python三大主流Web框架 2:三大主流web框架特点 二:正常运行Django项目所需要知道的注意事项 1.计算机的名称不能有中文,不然bug在哪你 ...

  6. md5-有道翻译

    网站 aHR0cHMlM0EvL2ZhbnlpLnlvdWRhby5jb20v 测试发现三个值是变化的 一.第一种方法 initiator一步一步找,在t.translate中找到以下内容 这里可以看 ...

  7. 【WPF】自定义一个自删除的多功能ListBox

    原文地址 https://www.cnblogs.com/younShieh/p/17008534.html 如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~ 我需要一个ListBo ...

  8. Java线程诊断

    1.诊断CPU占用过高 [root@master ~]# nohup java -jar JvmProject.jar & // 有问题的java程序 [1] 1627 [root@maste ...

  9. NET-Core利用etag进行浏览器缓存

    title: .NET Core浏览器缓存方案 date: 2022-12-02 14:17:36 tags: - .NET 缓存介绍及方案 在后端开发中经常会使用缓存来提高接口的响应速度,降低系统的 ...

  10. (23)go-micro微服务客户端开发(使用负载均衡)

    目录 一 main.go开发 二 客户端代码开发: 三 客户端测试功能 1.发送注册邮件 2.实现注册功能 3.查询用户功能 四 运行项目 五 最后 一 main.go开发 至此,咱们的项目服务端代码 ...