LeetCode训练

缺失的正整数

/*** 0~n-1中缺失的数字*/
public class MissingNum {public int missingNumber(int[] nums) {int i = 0;int j = nums.length - 1;while (i < j) {int m = i + ((j - i) >> 2);if (nums[m] == m) i = m + 1;else j = m - 1;}return nums[i] == i ? nums[i] + 1 : nums[i] - 1;}public static void main(String[] args) {int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 9};MissingNum missingNum = new MissingNum();System.out.println(missingNum.missingNumber(arr));}
}

数组中重复的数字

 //leetcode 指 Offer 03. 数组中重复的数字public int findRepeatNumber(int[] nums) {HashMap<Integer, Integer> map = new HashMap<>();int res = nums[0];for (int num : nums) {if (map.get(num) == null) {map.put(num, 1);} else {res = num;break;}}return res;}

盛水最多的容器

 //leetcode-11 盛最多水的容器public int maxArea(int[] height) {int left = 0;int right = height.length - 1;int maxArea = 0;/*  while (left < right) {int width = right - left;int deep = Math.min(height[left], height[right]);maxArea = Math.max(maxArea, width*deep);if (height[left] < height[right]) {left++;} else {right--;}}return maxArea;*/while (left < right) {maxArea = height[left] < height[right] ?Math.max(maxArea, (right - left) * height[left++]) :Math.max(maxArea, (right - left) * height[right--]);}return maxArea;}

 

二分查找

//二分查找:初始值left=0,right=length-1,搜索闭区间[left,right]; while循环条件left<=right;public static int binarySearch(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else if (nums[mid] > target) {right = mid - 1;}}//return left;return nums[left] == target ? left : -1;}//左边界查找:public static int leftBoundarySearch(int[] nums, int target) {int left = 0;int right = nums.length;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {right = mid;} else if (nums[mid] < target) {left = mid + 1;} else if (nums[mid] > target) {right = mid;}}//return left;if (nums.length == left) {return -1;}return nums[left] == target ? left : -1;}//右边界查找:public static int rightBoundarySearch(int[] nums, int target) {int left = 0;int right = nums.length;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {left = mid + 1;} else if (nums[mid] < target) {left = mid + 1;} else if (nums[mid] > target) {right = mid;}}//return left - 1;if (left == 0) {return -1;}return nums[left - 1] == target ? left - 1 : -1;}

合并两个有序链表

//合并两个有序链表public static ListNode mergeTwoLists1(ListNode l1, ListNode l2) {ListNode res = new ListNode(0);ListNode head = res;//指向头结点的引用while (l1 != null && l2 != null) {if (l1.value < l2.value) {res.next = l1;l1 = l1.next;} else {res.next = l2;l2 = l2.next;}res = res.next;}if (l2 == null) {res.next = l1;} else {res.next = l2;}return head.next;}

找到两个单链表相交的起始结点(判断链表是否相交)

 //找到两个单链表相交的起始结点(判断链表是否相交)//走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路//我先走我的路,再走你的路,你先走你的路,再走我的路,这样咱俩走的路程就一样了,速度一样,那么肯定在咱俩两条路的交叉口相遇,并一起走向终点。这思路,给跪了!public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) {return null;}ListNode A = headA;ListNode B = headB;// 直到两人相遇while (A != B) {if (A != null) {// 如果A没走到尽头就一直走下去A = A.next;} else {// 直到尽头也没遇见B,所以去往B走过的路A = headB;}if (B != null) {B = B.next;} else {B = headA;}}// 返回A\B第一次相遇的地方return B;}

求单链表是否有环(快、慢指针(龟兔赛跑思想,如果出现环形,那么必然相遇),快指针每次移动2步,慢指针每次移动一步

 //求单链表是否有环(快、慢指针(龟兔赛跑思想,如果出现环形,那么必然相遇),快指针每次移动2步,慢指针每次移动一步public static boolean hasCycle(ListNode head) {if(head == null || head.next == null){return false;}ListNode slow = head;ListNode fast = head.next;while (slow != fast){if (fast == null||fast.next == null){return false;}slow = slow.next;fast =fast.next.next;}//哈希表方案:每次遍历到一个节点时,判断该节点此前是否被访问过。
/*        Set<ListNode> seen = new HashSet<>();while (head!=null){if (!seen.add(head)){return true;}head = head.next;}return false;*/return true;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#线程学习

齐全线程学习转载于:https://www.cnblogs.com/AiYaTou/p/5110712.html

06 | 链表(上):如何实现LRU缓存淘汰算法?

缓存 作用 缓存是一种提高数据读取性能的技术&#xff0c;在硬件设计、软件开发中都有着非常广泛的应用&#xff0c;比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。 淘汰策略 常见的策略有三种&#xff1a;先进先出策略 FIFO&#xff08;First In&#xff0c;First Ou…

C++处理一个动态规划的问题

嗯哼&#xff0c;别人问的问题&#xff0c;看的我也头晕&#xff0c;百度了一下动态规划&#xff0c;看了看才想起来该怎么做&#xff0c;今天写了写代码&#xff0c;实现了~ 要求是递归&#xff0c;动态规划&#xff0c;想了想这种方法也是最简单的~ 所谓动态规划&#xff1a;…

07 | 链表(下):如何轻松写出正确的链表代码?

目录 技巧一&#xff1a;理解指针或者引用的含义 技巧二&#xff1a;警惕指针丢失和内存泄漏 技巧三&#xff1a;利用哨兵简化实现难度 技巧四&#xff1a;重点留意边界条件处理 技巧五&#xff1a;举例画图&#xff0c;辅助思考 技巧六&#xff1a;多写多练&#xff0c;…

“睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)

目录 1. 传统方法 2. 基本概念 2.1异步 2.2回调函数 2.3Promise 3. Generator 函数 3.1协程 3.2协程的 Generator 函数实现 3.3Generator 函数的数据交换和错误处理 3.4异步任务的封装 4. Thunk 函数 4.1参数的求值策略 4.2Thunk 函数的含义 4.3JavaScript 语言的…

【转】成为Java顶尖程序员 ,看这10本书就够了

“学习的最好途径就是看书“&#xff0c;这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处&#xff1a; 1.能出版出来的书一定是经过反复的思考、雕琢和审核的&#xff0c;因此从专业性的角度来说&#xff0c;一本好书的价值远超其他资料2.对着书上的…

“睡服”面试官系列第二十一篇之class基本语法(建议收藏学习)

目录 1. 简介 2. 严格模式 3. constructor 方法 4. 类的实例对象 5. Class 表达式 6. 不存在变量提升 7. 私有方法 8. 私有属性 9. this 的指向 10. name 属性 11. Class 的取值函数&#xff08;getter&#xff09;和存值函数&#xff08;setter&#xff09; 12. Cl…

08 | 栈:如何实现浏览器的前进和后退功能?

栈 后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。栈是一种“操作受限”的线性表&#xff0c;只允许在一端插入和删除数据。 为什么要使用到“栈”这种操作受限的数据结构&#xff1f; 事实上&#xff0c;从功能上来说&#xff0c;数组或链表确实可…

关于tag,viewWithTag

iOS SDK内置了一套搜寻机制&#xff0c;可通过tag来查找子视图。 **苹果公司很少给子视图设置tag.笔者所知范围的唯一例外出现在UIAlertView中&#xff0c;该类会给按钮分别设置值为1、2的标签 viewWithTag:可以在某视图的所有下属中根据tag来查找相关的子视图。 ** 假如有多个…

09 | 队列:队列在线程池等有限资源池中的应用

队列定义 先进者先出&#xff0c;这就是典型的“队列”。队列跟栈一样&#xff0c;也是一种操作受限的线性表数据结构。 顺序队列和链式队列 顺序队列&#xff1a;用数组实现的队列// 用数组实现的队列 public class ArrayQueue {// 数组&#xff1a;items&#xff0c;数组大…

“睡服”面试官系列第二十二篇之class的继承(建议收藏学习)

目录 1. 简介 2. Object.getPrototypeOf() 3. super 关键字 4. 类的 prototype 属性和__proto__属性 4.1extends 的继承目标 4.2实例的 __proto__ 属性 5. 原生构造函数的继承 6. Mixin 模式的实现 1. 简介 Class 可以通过 extends 关键字实现继承&#xff0c;这比 ES…

PICT实现组合测试用例

成功安装后&#xff0c;在命令行中输入命令pict&#xff1a; 可以看到pict命令的一些选项&#xff1a;/o:N 组合数&#xff0c;默认值为2&#xff0c;即pict生成的测试用例集中每条测试数据会有两个值与其他测试集是不同的&#xff1b;/d:C 值与值之间的分隔符&#xff0c;…

10 | 递归:如何用三行代码找到“最终推荐人”?

什么是递归&#xff1f; 递归是一种应用非常广泛的算法&#xff08;或者编程技巧&#xff09;。很多数据结构和算法的编码实现都要用到递归&#xff0c;比如 DFS 深度优先搜索、前中后序二叉树遍历等等。 去的过程叫“递”&#xff0c;回来的过程叫“归” 场景 周末你带着女…

前端学习(1723):前端系列javascript之uniapp语法下

<template><view><view v-if"show">uniapp</view><view>geyao</view><view v-for"item in items">{{item}}</view><view v-on:click"onClick(uni-app)">点击</view></view> …

瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士联手,搞不定弹出广告 amp; 恶意广告图标...

一位网友说他的电脑近期出了问题&#xff1a;开机后桌面和任务栏上的高速启动栏会出现恶意图标。删除了下次开机又会出现&#xff1b;使用电脑过程中每分钟都会弹出广告。他为电脑安装了瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士。以及广告神盾&#xff0c;都不能解决…

11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

划重点&#xff1a;特定算法是依赖特定的数据结构的&#xff0c;带着问题去学习&#xff0c;是最有效的学习方法 本节分析冒泡排序、插入排序、选择排序三种排序算法 如何分析一个排序算法&#xff1f; 分析一个排序算法&#xff0c;要从以下几个方面入手&#xff1a; 排序算…

12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?

算法对比&#xff1a; 算法时间复杂度适合场景冒泡排序、插入排序、选择排序O(n2)小规模数据归并排序、快速排序O(nlogn&#xff09;大规模数据 归并排序和快速排序都用到了分治思想&#xff0c;非常巧妙。我们可以借鉴这个思想&#xff0c;来解决非排序的问题&#xff0c;比如…

C风格字符串与C++风格字符串

C风格字符串与C风格字符串 C风格字符串&#xff1a;对字符串进行操作的 C 函数定义在头文件<cstring>中&#xff1b; 1. 字符串定义&#xff1a;char* result&#xff1b; 2. 字符串的最后一个字符是null字符&#xff08;\0&#xff09;&#xff0c;可以通过这个字符确定…

13 | 线性排序:如何根据年龄给100万用户数据排序?

三种时间复杂度是 O(n) 的排序算法&#xff1a;桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的&#xff0c;所以我们把这类排序算法叫作线性排序&#xff08;Linear sort&#xff09;。之所以能做到线性的时间复杂度&#xff0c;主要原因是&#xff0c;这三…