前言

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

  我之前断断续续地刷过一些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. 【大数据课程】高途课程实践-Day02:利用Hive SQL编写离线数仓实现可视化展示

    〇.概述 1.实现内容 使用Hive SQL编程,构造分层离线数仓 并可以通过Quick Bi进行展示 2.过程 (1)数据接⼊到ODS层 (2)进⾏ODS到DWD层数据开发 (3)进⾏ODS到DIM ...

  2. Dijkstra 算法说明与实现

    Dijkstra 算法说明与实现 作者:Grey 原文地址: 博客园:Dijkstra 算法说明与实现 CSDN:Dijkstra 算法说明与实现 问题描述 问题:给定出发点,出发点到所有点的距离之和 ...

  3. from表单前后端数据编码格式-Ajax发送json格式数据-Ajax发送文件-Django自带序列化组件-Ajax结合sweetalert

    目录 一:前后端传输数据的编码格式(contentType) 1.研究post请求数据的编码格式 2.可以朝后端发送post请求的方式 3.前后端传输数据的编码格式 4.研究form表单 5.当for ...

  4. if-else 的优美写法

    前言‍♂️ 相信大家或多或少都接触过拥有庞大 if else 的项目代码吧,多重嵌套的 if else 在维护的时候真的让人很恼火,有时候一个 bug 排查下来,严重感觉身体被掏空. 本文并未有消灭或 ...

  5. 7、解决swagger测试接口报错:TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body

    一.Swagger报错: 1.报错类型: TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method ...

  6. Spark详解(07) - SparkStreaming

    Spark详解(07) - SparkStreaming SparkStreaming概述 Spark Streaming用于流式数据的处理. Spark Streaming支持的数据输入源很多,例如 ...

  7. 如何实现在react现有项目中嵌入Blazor?

    如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...

  8. 使用英特尔 Sapphire Rapids 加速 PyTorch Transformers 模型

    大约一年以前,我们 展示 了如何在第三代 英特尔至强可扩展 CPU (即 Ice Lake) 集群上分布式训练 Hugging Face transformers 模型.最近,英特尔发布了代号为 Sa ...

  9. Ubuntu desktop 文件的书写格式

    首先切换到存放 desktop 文件的目录下,编辑好就可以保存了 cd /usr/share/applications/ vim name.desktop [Desktop Entry] Name=显 ...

  10. Keepalived高可用集群部署

    KeepAlived 目录 KeepAlived KeepAlived安装 KeepAlived部署 准备工作 主备模式 节点配置 验证 正常状态 故障 故障恢复 1+N(一主多备)模式 节点配置 验 ...