自己编程怎么做网站教程,编写软件开发文档,重庆机有哪些网站建设公司,陵水建设局网站在字符串 s 中找出第一个只出现一次的字符。如果没有#xff0c;返回一个单空格。
示例:
s abaccdeff 返回 b
s 返回
限制#xff1a;
0 s 的长度 50000
思路#xff1a;map记录次数#xff0c;再…在字符串 s 中找出第一个只出现一次的字符。如果没有返回一个单空格。
示例:
s abaccdeff 返回 b
s 返回
限制
0 s 的长度 50000
思路map记录次数再次遍历找出次数1的。
class Solution {public char firstUniqChar(String s) {// 哈希表存储字符出现次数MapCharacter,Integer mapnew HashMap();for(int i0;is.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 i0;is.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(headBnull || headAnull){return null;}ListNode tempAheadA;ListNode tempBheadB;int a0;int b0;while(tempA.next!null){tempAtempA.next;a;}while(tempB.next!null){tempBtempB.next;b;}if(tempB!tempA){return null;}tempAheadA;tempBheadB;if(ab){for(int i0;ia-b;i){tempAtempA.next;}}else{for(int i0;ib-a;i){tempBtempB.next;}}while(tempB!tempA){tempAtempA.next;tempBtempB.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 leftsearchRangeLeft(nums,target);int rightsearchRangeRight(nums,target);if(left-1)return 0;return right-left1;}public int searchRangeLeft(int[] nums, int target) {int left0;int rightnums.length-1;while(leftright){int mid(leftright)/2;if(nums[mid]target){rightmid-1;}else if(nums[mid]target){leftmid1;}else if(mid0 || nums[mid-1]!target){return mid;}else{rightmid-1;}}return -1;}public int searchRangeRight(int[] nums, int target) {int left0;int rightnums.length-1;while(leftright){int mid(leftright)/2;if(nums[mid]target){rightmid-1;}else if(nums[mid]target){leftmid1;}else if(midnums.length-1 || nums[mid1]!target){return mid;}else{leftmid1;}}return -1;}
} 一个长度为n-1的递增排序数组中的所有数字都是唯一的并且每个数字都在范围0n-1之内。在范围0n-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 resnums.length;for(int i0;inums.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(leftright){int mid (leftright) / 2;if(nums[mid]!mid) right mid -1;else left mid 1;}return left;}
}