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

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

限制:

0 <= s 的长度 <= 50000

思路:map记录次数,再次遍历找出次数1的。

class Solution {public char firstUniqChar(String s) {// 哈希表存储,<字符,出现次数>Map<Character,Integer> map=new HashMap<>();for(int i=0;i<s.length();i++){if(map.containsKey(s.charAt(i))){map.put(s.charAt(i),map.get(s.charAt(i))+1);}else{map.put(s.charAt(i),1);}}//顺序判断,只要找到第一个出现次数为1的就返回for(int i=0;i<s.length();i++){if(map.get(s.charAt(i))==1)return s.charAt(i);}return ' ';}
}

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

示例 1:

输入: [7,5,6,4]
输出: 5

归并加一句统计。

class Solution {private int res;public int reversePairs(int[] nums) {if (nums == null || nums.length < 1) {return 0;}mergeSort(nums, 0, nums.length - 1);return res;}private void mergeSort(int[] arr, int left, int right) {if (left == right) {return;}int mid = (left + right) >>> 1;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right);}private void merge(int[] arr, int left, int mid, int right) {int[] temp = new int[right - left + 1];int i = left, j = mid + 1, index = 0;while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[index++] = arr[i++];} else {temp[index++] = arr[j++];//加一句res += mid - i + 1;}}while (i <= mid) {temp[index++] = arr[i++];}while (j <= right) {temp[index++] = arr[j++];}System.arraycopy(temp, 0, arr, left, temp.length);}
}

如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

思路:先都走到最后,顺便统计长度。

结尾不一样就肯定没有相交,返回。

然后让长的先几步,走到一样长了再一起往前走,相遇就找到了。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if(headB==null || headA==null){return null;}ListNode tempA=headA;ListNode tempB=headB;int a=0;int b=0;while(tempA.next!=null){tempA=tempA.next;a++;}while(tempB.next!=null){tempB=tempB.next;b++;}if(tempB!=tempA){return null;}tempA=headA;tempB=headB;if(a>b){for(int i=0;i<a-b;i++){tempA=tempA.next;}}else{for(int i=0;i<b-a;i++){tempB=tempB.next;}}while(tempB!=tempA){tempA=tempA.next;tempB=tempB.next;}return tempA;}
}

统计一个数字在排序数组中出现的次数。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

限制:

0 <= 数组长度 <= 50000

思路:两次二分,稍微修改一下查最左或最右。最后相减即可。

class Solution {public int search(int[] nums, int target) {int left=searchRangeLeft(nums,target);int right=searchRangeRight(nums,target);if(left==-1)return 0;return right-left+1;}public int searchRangeLeft(int[] nums, int target) {int left=0;int right=nums.length-1;while(left<=right){int mid=(left+right)/2;if(nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else if(mid==0 || nums[mid-1]!=target){return mid;}else{right=mid-1;}}return -1;}public int searchRangeRight(int[] nums, int target) {int left=0;int right=nums.length-1;while(left<=right){int mid=(left+right)/2;if(nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else if(mid==nums.length-1 || nums[mid+1]!=target){return mid;}else{left=mid+1;}}return -1;}
}

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

示例 1:

输入: [0,1,3]
输出: 2
示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

限制:

1 <= 数组长度 <= 10000

思路1:异或,就一个没出现的剩下了,别的两两抵消了。

class Solution {public int missingNumber(int[] nums) {int res=nums.length;for(int i=0;i<nums.length;i++){res^=nums[i];res^=i;}return res;}
}

思路2:二分,条件就是值是否等于下标。

class Solution {public int missingNumber(int[] nums) {int left = 0;int right = nums.length-1;while(left<=right){int mid = (left+right) / 2;if(nums[mid]!=mid) right = mid -1;else left = mid + 1;}return left;}
}

剑指offer:50-53记录相关推荐

  1. 【LeetCode】剑指 Offer 50. 第一个只出现一次的字符

    [LeetCode]剑指 Offer 50. 第一个只出现一次的字符 文章目录 [LeetCode]剑指 Offer 50. 第一个只出现一次的字符 一.哈希表 二.有序哈希表 本题考查哈希表的使用, ...

  2. 剑指offer刷题记录 python3 Java

    剑指offer刷题记录 python3 Java 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 03. 数组中重复的数字 [★]剑指 Of ...

  3. 剑指offer做题记录

    1. 剑指 Offer 03. 数组中重复的数字   力扣 class Solution { public:int findRepeatNumber(vector<int>& nu ...

  4. 剑指Offer 刷题记录

    文章目录 剑指offer题目 01. 二维数组中的查找 02. 替换空格 03. 从尾到头打印链表 04. 重建二叉树 05. 两个堆栈模拟一个队列 06. 旋转数组的最小数字 07. 斐波那契数列 ...

  5. 剑指offer刷题记录(上)

    记录刷题过程,方便自己后期回顾 题目来自<剑指offer>,在牛客上OC,思路大多来自剑指offer,偶尔来自自己的碎碎念,代码自己瞎写的,如果有更优的方法请告诉我,谢谢大佬们 语言:py ...

  6. 剑指offer:39-42记录

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输 ...

  7. string类函数和牛客网剑指offer刷题记录

    1.strcat char* strcat(char *strDest,const char *strSrc){assert(strDest && strSrc);char *p = ...

  8. 剑指offer:63-66记录

    假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候 ...

  9. 剑指offer:33-37记录

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树: 5     / \   ...

最新文章

  1. 佛吉尼亚大学计算机世界排名,弗吉尼亚大学计算机世界排名
  2. 基于Vue.js的精选壁纸推荐单页应用
  3. linux java 生成证书_Java 制作证书(Windows 和Linux)
  4. 设计模式的理解 : 门面模式、外观模式 (Facade)
  5. 字符函数和内存函数模拟实现
  6. 小师妹学JavaIO之:目录还是文件
  7. 让Spring架构减化事务配置(转)
  8. AppTheme 属性详解
  9. re.containerbase.startinternal 子容器启动失败_微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)...
  10. HINSTANCE HANDLE HWND 的区别及一般方法
  11. abaqus如何快速导入其他cae文件的assembly?
  12. Vim配置#pathogen插件管理工具
  13. jQuery学习(菜鸟教程)
  14. CloudFlare Workers 设置使用自定义域名
  15. 怎么把手机中的照片做成视频?原来这么简单就可以,涨知识了
  16. Unix环境高级编程 笔记
  17. 关于使用PyQt5时报错This application failed to start because no Qt platform plugin could be initialized及后续问题
  18. 搭建环境,创建vue3+typescript+vuetify项目
  19. AltiumDesigner 绘制PCB常见问题
  20. Vmware Ubuntu 无法解析域名解决

热门文章

  1. linux用while循环输出1到10,Linux Shell系列教程之(十一)Shell while循环 | Linux大学...
  2. i2c_add_driver函数用法
  3. SIP 中的Dialog,call,session 和 transaction .
  4. java enumeration 排序_Java如何对java.util.Enumeration进行排序?
  5. mysql 增量备份脚本_MySQL自动化(全量+增量)备份脚本
  6. 由于在客户端检测到一个协议错误_TLS协议的分析
  7. maple 2018 窗口关闭提示乱码_如果解决SOLIDWORKS工程图转CAD字体出现乱码的问题_SolidWorks生信科技...
  8. 神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(安装TensorFlow2.0)
  9. Sharepoint学习笔记 –架构系列—10 Sharepoint的服务器端对象模型(Server Object Model) 2.内容层次结构
  10. 第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)