首页 > 其他分享 >剑指offer_20230723

剑指offer_20230723

时间:2023-07-24 11:23:48浏览次数:32  
标签:right offer 元素 mid 遍历 numbers 数组 20230723

剑指 Offer 50. 第一个只出现一次的字符

题目说明

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

解题思路1:HashMap

使用传统的HashMap,对整一个数组进行遍历,更新记录每个字母的出现次数。在遍历结束之后重新遍历一遍数组,获取每个字母对应的取值。技巧是可以设置成为<Integer, Boolean>类型,出现第一次置为true,第二次乃至更多次都置为false

解题思路2:new int[26]

因为题目说明只有26个小写字母,那么我们可以用new int[26]的数组来当作HashMap使用,此后思路和思路1基本相同。但是这里不能用Boolean类型数组,因为即使字母没出现也要赋予一个值,那么就有三种状态了,用Boolean不再合适

解题思路3:LinkedHashMap

在Java中,使用LinkedHashMap可以实现有序哈希表

这道题目很明显对于顺序有一个要求,因此我们可以用LinkedHashMap来存储,这样在记录了次数的同时也维护了顺序性。此后就不用再去遍历一遍初始数组而是遍历LinkedHashMap来获取答案即可

剑指 Offer 11. 旋转数组的最小数字(第二次啦)

题目说明

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。

解题思路:二分查找

fig1

考虑数组中的最后一个元素x:在最小值右侧的元素都一定小于等于x,在最小值左侧的元素一定都大于等于x,可以利用该性质通过二分查找找出。

我们通过right处的值和mid处的值进行比较。可能有三种情况发生:

  1. numbers[right] > numbers[mid]:说明从mid到right是有序的,最小值有可能出现在mid处,将right更新为mid
  2. numbers[right] < numbers[mid]:说明波谷出现在mid + 1到right这一段,将left更新为mid
  3. numbers[right] < numbers[mid]:可能出现如下图所示的情况,此时无法确定波谷在mid到right这一段或者left到mid这一段,但可以肯定的是一定不会出现在high的位置,所以令high左移一步缩小范围

fig4

当循环结束时left=high,返回该位置的数字即可

剑指 Offer 53 - II. 0~n-1中缺失的数字

题目说明

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

解题思路

nums[i]i有两种情况,分别是相等和nums[i] > i,前者说明i及左边没问题,后者说明i右边没问题(但i可能是有问题的)

image-20230724111224054

跳出时,变量ij 分别指向 “右子数组的首位元素” 和 “左子数组的末位元素” 。因此返回i即可。

标签:right,offer,元素,mid,遍历,numbers,数组,20230723
From: https://www.cnblogs.com/xccx-0824/p/17576755.html

相关文章

  • 20230723练习总结
    CF923DPickingStrings当变化规则不好分析的时候可以考虑自己随便模拟一下变化过程,总结浓缩出一些等价且更简单的变化规则。尝试推出几个比较简单的变化关系:\(\texttt{B}\rightarrow\texttt{AC}\rightarrow\texttt{AAB}\rightarrow\texttt{AAAC}\rightarrow\texttt{C}\right......
  • 剑指 Offer 35. 复杂链表的复制
    题目:/*//DefinitionforaNode.classNode{public:intval;Node*next;Node*random;Node(int_val){val=_val;next=NULL;random=NULL;}};*/classSolution{public:Node*copyRandomList(N......
  • 剑指 Offer 18. 删除链表的节点
    题目:(有改动和陷阱,不可以使用delete否则报错!!)classSolution{public:ListNode*deleteNode(ListNode*head,intval){ListNode*fhead=newListNode(0);#设置虚拟头节点fhead->next=head;ListNode*cur=fhead;while(cur-......
  • 剑指 Offer 24. 反转链表
    题目:/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:ListNode*reverseList(ListNode*head){ListNode*temp......
  • 剑指 Offer 06. 从尾到头打印链表
    题目:/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:vector<int>reversePrint(ListNode*head){vecto......
  • 剑指offer_20230719
    剑指Offer24.反转链表题目说明定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。解题思路1:栈解题思路2:递归如果从后往前看的话,其实可以这样理解。如果当前处于nk,那么就另nk.next.next=nk,并且将nk.next指向空即可。处理完之后,以nk为头节点的链表其......
  • 剑指offer_20230720
    剑指Offer59-I.滑动窗口的最大值题目说明给定一个数组nums和滑动窗口的大小k,请找出所有滑动窗口里的最大值。示例:输入:nums=[1,3,-1,-3,5,3,6,7],和k=3输出:[3,3,5,5,6,7]解释:滑动窗口的位置最大值[13-1]-35367 ......
  • 《剑指offer》编程在练评判
    下面是剑指offer书中的练习题在九度在线评判系统中的在线评测,非常适合大家练习。文章是转载。    目前国内外越来越多公司将在线机试的方式引入求职招聘中,或者通过各种在线比赛和比赛平台搜寻各类编程人才。在线编程练习可以培养求职者良好的编程习惯,提高编程水平,其自动判......
  • 《剑指offer》 对应的 在线测试地址
    《剑指Offer》面试题集收录汇总面试题1赋值运算符函数不适合在线模式面试题2实现Singleton模式不适合在线模式面试题3二维数组中的查找已收录面试题4替换空格已收录面试题5从头到尾打印链表已收录面试题6重建二叉树已收录面试题7用两个栈实现队列已收录面试......
  • 剑指 Offer 67. 把字符串转换成整数
    题目classSolution{public:intstrToInt(stringstr){if(str.size()==0)return0;#空字符串情况intcur=0;while(str[cur]=='')cur++;#直接从非空字符开始处理booloverflow=false;......