剑指Offer - 九度1283 - 第一个只出现一次的字符2013-11-21 21:13 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1. 样例输入: ABACCDEFF AA 样例输出: 1 -1 题意分析: 题目要求给定一个大写字母的字符串,找出第一个只出现了一次的字符的下标,从0开始. 由于ascii字符不…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'. 思路 创建哈希表,键值key为字符,值value为出现次数.第一遍扫描:对每个扫描到的字符的次数加一:第二遍扫描:对每个扫描到的字符通过哈希表查询次数,第一个次数为1的字符即为符合要求的输出. 由于字符(char)是长度为8的数据类型,共有256中可能,因此哈希表可以用一…
题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 题目分析 只需要用map记录字符出现的次数就行,比较简单的题 代码 function FirstNotRepeatingChar(str) { if (str.length < 1 || str.length > 10000) return -1; const map = {}; for (let i = 0; i < str.length; i++) { i…
  题目描述:   在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).   解题思路:   对于本题,这里给出以下三种解法:(1)用 HashMap 建立每个字符与其出现次数的映射,然后再依次遍历字符串时,找到第一个出现次数为1的字符,返回其位置即可.(2)更进一步,因为该字符串全部是字母,所以可以用一个数组代替哈希表,数组下标就代表该字母.(3)使用模式匹配从前(indexOf)和从后(las…
#include"iostream" #include"stdio.h" using namespace std; ; ; template<typename T>class StackWithMin { public: void push(const T& value); void pop(); T min(); private: ; int minNum=INF; T* mData=new T[MAXN]; T* mMin=new T[MAX…
问题描述: 输入n个整数,找出其中最小的k个数 思路1: 先排序,再取前k个 时间复杂度O(nlogn) 下面给出快排序的代码(基于下面Partition函数的方法) public void QuickSort(int[] arr, int start, int end){ if(start == end){ return; } int index = Partition(arr, start, end); if(index > start){ QuickSort(arr, start, ind…
一.题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.解题思路 1.思路1 首先对数组进行排序,然后取出前k个数.排序方法可选用快速排序,时间复杂度为O(nl*ogn).示例代码: import java.util.ArrayList; import java.util.Arrays;public class Solution {     public ArrayList<Integer> GetLeast…
一开始写的垃圾代码,push和pop都是O(N) class Solution { public: vector<int> vec; int min_val=INT_MAX,min_cnt=0; void push(int value) { vec.push_back(value); if(min_cnt==0){ min_val=value,min_cnt=1; } else if(min_val>value){ min_val=value,min_cnt=1; } } void po…
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 方法1:用set记录出现过的数字 class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { unordered_set<int> st; for(auto& num:data){ if(st.count(num)){ st.erase(num); } e…
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189 leetcode 160: https://leetcode.com/problems/intersection-of-two-linked-lists/ 参与人数:3252   时间限制:1秒   空间限制:32768K 本题知识点: 链表 时间空间效率的平衡题…